home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 4 / CU Amiga Magazine's Super CD-ROM 04 (1996)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1996-11].iso / magazine / psion / new / spydrx.lzx / readme.txt < prev    next >
Text File  |  2008-02-11  |  108KB  |  2,713 lines

  1.                                 README.TXT
  2.                                    for
  3.                                  SPYDERX
  4.                                Version 2.3                            
  5.  
  6.  
  7. DEFINITION OF SHAREWARE
  8.  
  9. Shareware distribution gives users a chance to try software before
  10. buying it. If you try a Shareware program and continue using it, you
  11. are required to register it.
  12.  
  13. Copyright laws apply to both Shareware and retail software, and the
  14. copyright holder retains all rights, with a few specific exceptions
  15. as stated below. Shareware authors are accomplished programmers, just
  16. like retail authors, and the programs are of comparable quality. (In
  17. both cases, there are good programs and bad ones!) The main difference
  18. is in the method of distribution. The author specifically grants the right
  19. to copy and distribute the software, either to all and sundry or to a
  20. specific group. For example, some authors require written permission
  21. before a commercial disk vendor may copy their Shareware.
  22.  
  23. Shareware is a distribution method, not a type of software. You should
  24. find software that suits your needs and pocketbook, whether it's retail
  25. or Shareware. The Shareware system makes fitting your needs easier,
  26. because you can try before you buy. And because the overhead is lower,
  27. prices are lower also. Shareware has the ultimate money-back guarantee --
  28. if you don't use the product, you don't pay for it.
  29.  
  30.  
  31. WHAT IS SPYDERX?
  32.  
  33. SpyderX provides you with the ability to create hyptertext webs
  34. of cells containing text, mathematical expressions, and executable
  35. scripts; and to use those webs to store data, solve problems, and
  36. support your own creative process. 
  37.  
  38. A few of the many possible applications for SpyderX are:
  39. hypertext notepad and database, job cost estimator, scheduling tool,
  40. financial modeling tool, dynamic system simulator, user interface
  41. design tool, numerical differential equation solver, semantic network
  42. modeler, requirements analysis tool, neural network simulator,
  43. contingency planner, and general purpose programming language.
  44.  
  45. Each cell in a SpyderX web contains a name, a text field, a value field,
  46. and a formula/script field. References to other cells, which appear in
  47. any field of a cell, may be used as hot-links to those cells.  Cells may
  48. refer to themselves, making possible cycles of hypertext reference, and
  49. recursive script execution.
  50.  
  51. Output of the program includes results of script execution and reports
  52. of cell contents, and may be directed to the LCD display, the text field
  53. of a cell, or to a file in memory, which may be uploaded to a desktop
  54. computer for further analysis or printing.  This version of SpyderX,
  55. version 2.3, runs only a Psion Series 3a.
  56.  
  57. WHOM IS SPYDERX FOR?
  58.  
  59. SpyderX was developed by an engineer and software developer for
  60. engineers, scientists, and software developers.  It provides primitive
  61. data structures and algorithms which support common design, modeling,
  62. estimating, scheduling, and computing needs of people who deal with
  63. complex subjects, systems, and interactions.  A certain amount of practice
  64. is necessary to realize the maximum benefit from the program.  This
  65. practice develops skills for navigating hypertext webs, and promotes a
  66. cellular perspective on problems and systems.
  67.  
  68. NEW IN VERSION 1.3
  69.  
  70. Version 1.3 fixes a bug that cropped up in version 1.2, which prevented
  71. the registration key from having an effect on the display of reminders
  72. to register.
  73.  
  74. Also in version 1.3, the reporting function is expanded to include
  75. InPointer and OutPointer reports, and well as a Trail report. The
  76. pointer reports are vital for cross referencing complex webs, such
  77. as program structure charts, hierarchic state machine descriptions,
  78. and Pert graphs.  The trail report allows the user to obtain
  79. a history of the cells which have been entered via a Linkto command.
  80.  
  81. SpyderX now can serve as a link/paste client via the "bring" command.
  82. Unfortunately, it cannot yet be a server.  That feature must wait
  83. on a change of underlying software libraries.
  84.  
  85. Finally, the size of SpyderX was reduced by 15%, and its speed was
  86. increased somewhat.  Current users will probably notice the difference.
  87.  
  88. VERSION 1.3a -- MAINTENANCE RELEASE
  89. Fixed a bug which caused the formula field of the home cell
  90. to be cleared when a web was loaded.
  91.  
  92. VERSION 1.4 -- MAINTENANCE RELEASE
  93. Fixes a bug introduced in version 1.3a which made new cells invisible
  94. to formulas until the formulas were changed.
  95.  
  96. VERSION 1.5 -- MAINTENANCE RELEASE
  97. Fixes a bug in parsing formula fields if numbers or strings are over
  98. 48 characters in length.
  99.  
  100. VERSION 1.6 -- SKIPPED
  101.  
  102. VERSION 1.7 -- FEATURES ADDED AND PERFORMANCE AND INTERFACE IMPROVED
  103. This latest version of SpyderX calculates substantially faster than
  104. the previous versions.  The user interface has been simplified, and
  105. an overview cell browser and trail browser have been added. Formulas
  106. may conditionally execute expressions using IF statements, and end
  107. calculation using an EXIT statement.
  108.  
  109. Instead of allowing just one expression per formula field, formula
  110. fields may now contain one or a sequence of expressions as described
  111. in the section called FORMULA GRAMMAR below(way below).
  112.  
  113. VERSION 2.0 -- SCRIPT LANGUAGE AND INPUT STREAM ADDED
  114. This version of SpyderX supports a general purpose scripting language,
  115. including the verbs: if, set, for, do, while, in, out, report, and
  116. exit.  The script language extends and is compatible with previous
  117. versions of SpyderX formula syntax.  In the rest of this file,
  118. the words script and formula will be used interchangably.
  119.  
  120. VERSION 2.1 -- BUG FIXES AND IMPROVED INTERFACE
  121. Bugs related to configuration varible names and timely updating
  122. of cell values during reporting were fixed.  Zooming has been
  123. improved so that it will zoom both ways and remember where you
  124. left it.  The presence or absence of the status window is now
  125. remembered for each web.
  126.  
  127. VERSION 2.21 -- ENHANCED SCRIPTING LANGUAGE
  128. Expressions can include strings as well as numbers.  String
  129. concatenation operator added.  Execution references may now
  130. include arguments (like arguments of fuction calls).  Input
  131. streams may include strings and comments.
  132.  
  133. VERSION 2.3 -- HELP AVAILABLE
  134. Version 2.3 provides help on keystrokes, built-in functions,
  135. and script language statements. Allows 'bring'ing of text with
  136. embedded carriage returns.
  137.  
  138.  
  139. UNREGISTERED VERSION HANDICAP -- The unregistered version of
  140. SpyderX v2.3 is handicapped.  The webs (SpyderX applications) may be
  141. stored to or retrieved from files; but any IO which they do may not
  142. be directed to files.  In the unregistered version, such IO may be
  143. directed only to/from the screen, the keyboard, and the text fields
  144. of cells.  This limitation is insignificant for familiarization
  145. with the product.  It becomes significant when you try to integrate
  146. the use of the program with into daily work flow with a desktop computer.
  147. But by then you will know the remedy, registration, to be worthwhile.
  148.  
  149. INSTALLING SPYDERX
  150.  
  151. 1.  Before installing SpyderX on your Psion 3a, create a \web\
  152. directory. This is where the program will keep its data files, unless
  153. you direct it to store them elsewhere.
  154.  
  155. 2.  If you have no \app\ directory on your Psion, create one
  156. to hold the SpyderX executable.
  157.  
  158. 3.  Use PKUNZIP or equivalent to decompress the SpydrX.zip file into
  159. SpyderX.app, this Readme.txt file, and a collection of sample webs,
  160. labeled *.web.
  161.  
  162. 4.  Use MCLINK, WINLink3, PsiWin or some other PSION remote file transfer
  163. program to copy SpyderX.app to the \app\ directory on your chosen solid
  164. state disk drive.
  165.  
  166. 5.  Then transfer the sample webs to the \web\ directory that
  167. you created in step 1.
  168.  
  169. 6.  Choose Install from the Apps menu of the system screen, and
  170. select SpyderX for installation.
  171.  
  172. 7.  If all goes well, the SpyderX icon will appear on the desktop,
  173. along with sample webs which you copied to the \web\ directory.
  174.  
  175. 8.  Try the simple tutorial in the next section of this Readme file.
  176.  
  177. FIRST TUTORIAL
  178.  
  179. If SpyderX was sucessfully installed, there will be several sample webs
  180. to choose from under the SpyderX icon (A spider hanging from a thread).
  181.  
  182. ====Piggy
  183.  
  184. Select the web called "Piggy" and press return.  Your Psion should
  185. display a window divided into two panes by a horizontal line.
  186.  
  187. The top pane, the narrow one, contains the words "PIGGY--home".  This is
  188. the name pane, a read-only pane, whose leftmost word is the name of the
  189. web, and whose rightmost word is the the cellname (home).
  190.  
  191. The larger pane is the text pane.  It contains an edit box in which
  192. text may be entered into the text field of the currently displayed
  193. cell. 
  194.  
  195. Every SpyderX web contains a "home" cell, which is diplayed on entry to
  196. the web; and which cannot be deleted. The text area of the home cell is
  197. frequently used to describe the purpose of the web, and to present a
  198. simple map of its contents.  This information is supplied for the Piggy
  199. web, as you can verify by using the arrow keys to scroll through the text
  200. field of the cell.
  201.  
  202. ====|====Browsing the Web
  203. Press the menu button and you will see in the menu bar an entry called
  204. 'Browse'.  Select that entry and the four choices 'Prev', 'Next', 
  205. 'Overview', and 'Trail' are displayed with their accelerators PSION+, PSION-,
  206. PSION/, and PSION*.  Use the + and - accelerators to browse the Piggy web,
  207. returning to the point from which you began.
  208.  
  209. You will notice that the cells in the web appear in alphabetic order
  210. when browsed, and that browsing forward from the last cell in sequence
  211. returns you to the first cell in sequence.
  212.  
  213. Choose the / accelerator, and a window will open in the middle of
  214. the screen, which may be scrolled to show the names of all of the
  215. cells in the web in alphabetical order.  If you want to go to a
  216. particular cell shown in the browser, position the highlight to 
  217. that cell's name and press ENTER.  To exit the browser without 
  218. changing cells, press ESC.
  219.  
  220. If the name of the cell you want is not in the window, you may scroll
  221. to it with the up and down arrow keys, or type the first letter of the
  222. cell name, which will cause the browser to go to the portion of the
  223. overview which contains cells beginning with the letter typed.
  224.  
  225. Choosing the * accelerator activates the trail browser which is 
  226. discussed in the section on hypertext links.
  227.  
  228. ====|====Changing the Current Cell
  229. Aside from browsing, there are three other methods of moving from
  230. one cell to another.  These methods are: 'Linking' to a cell, 'Going'
  231. to a cell, and following a hypertext link.  The next three short
  232. paragraphs describe how to perform each operation.
  233.  
  234. ====|====|====Linking to a Cell
  235. When you 'link' to a cell, you transfer to that cell with the
  236. expectation of returning to the current cell.  To try this, choose
  237. 'Linkto' from the Cell menu, and enter the name of the cell
  238. 'pennies' into the dialog box that appears.  When you press enter,
  239. the screen should show the 'pennies' cell.  Return to the cell you
  240. left by pressing ESC, or choosing 'Unlink' from the Cell menu.
  241.  
  242. SpyderX keeps a trail of cells to which return is expected, so that
  243. you can return from many levels of linking by repeatedly pressing ESC.
  244. You may view the return trail by activating the trail browser in
  245. the browse menu.  From that browser, you may link to a cell on the
  246. trail by positioning the underline cursor to the cell, and pressing
  247. return.
  248.  
  249. ====|====|====Going to a Cell
  250. When you 'go' to a cell, you transfer to that cell with no
  251. expectation of returning to the current cell.  To try this, choose
  252. 'Goto' from the Cell menu, and enter the cell name 'dimes' into
  253. the dialog box that appears.  When you press enter, the screen
  254. should show the 'dimes' cell.  The cell that you left will not
  255. be placed on the trail, so you will have to 'browse' your
  256. way back.
  257.  
  258. ====|====|====Hypertext Links
  259. Wherever the name of another cell appears in the text pane
  260. of the current cell, you can use that name as a hypertext link
  261. to the other cell.  In Piggy, hypertext links to other cells
  262. are marked by preceding them with ampersands (&).  This convention
  263. is unnecessary for the functioning of the links, but it makes
  264. it easier to navigate the web.
  265.  
  266. To follow a hypertext link, position the cursor in the text stream
  267. a bit before the link, and select 'Hunt' from the Cell menu.
  268. SpyderX will scan forward within the current cell until it finds
  269. a valid link, and then transfer to the cell named in that link.
  270. The destination cell will replace the one currently shown.  To
  271. return to the previous cell, press the Esc key, or select 'Unlink'
  272. from the Cell menu.
  273.  
  274. NOTE:  Whenever the name of a cell is typed into an edit pane,
  275. it automatically becomes a hypertext link to that cell.
  276.  
  277. NOTE:  When you select a cell name in the overview browser or
  278. the trail browser, and press enter, the named cell is 'linked' to.
  279. You may return to the cell from which you left by pressing ESC.
  280.  
  281. ====|====The Math Window
  282. In addition to the text window, each cell also has a math window,
  283. which you may see by using the diamond key.
  284.  
  285. The math window is divided into three panes.  The top one, as
  286. before, is the name pane, a read-only pane which contains the
  287. name of the web followed by the name of the currently displayed
  288. cell.
  289.  
  290. The middle pane is the value pane.  Into this pane are entered
  291. values which one wishes to associate with the cell; and from this
  292. pane may be read the results of calculation, the latest value of
  293. the cell.
  294.  
  295. The bottom pane is the formula (or script) pane.  It contains an edit
  296. box, into which an expression may be entered for the calculation of
  297. the value of this cell.  An expression may employ cellnames and
  298. built-in functions to compute a new value for the cell in which
  299. it appears.
  300.  
  301. NOTE:  You can transfer between panes with the TAB key.
  302.  
  303. NOTE:  Cell names in formulas may be used as hypertext links to other
  304. cells in the say way as cell names in text fields.
  305.  
  306. NOTE:   the formula (also known as the script) field may contain a
  307. sequence of script language statements and/or arithmetic expressions
  308. which are evaluated in order.  After each evaluation of an arithmetic
  309. expression statement, the value of the cell is set to the value returned
  310. by the expression (See grammar below).
  311.  
  312. ====|====Calculating a Result
  313. Next we will see how a web can be used to calculate values of interest.
  314. In this case, our net worth, or the sum of the coins in our piggy bank
  315. is the value of interest.
  316.  
  317. Select the Math window, and use the browse accelerators PSION+ or
  318. PSION- to traverse the cells of the PIGGY web.  Notice that most of
  319. the cells have names corresponding to the names of denominations
  320. of US coinage.
  321.  
  322. Enter into the value field of each cell whose name is a denomination
  323. of coinage, the total number of coins of that denomination which you
  324. have on hand. (Use TAB to position the cursor to the value field).
  325.  
  326. Position to the cell called 'Piggy' and choose 'Execute' from the
  327. Special Menu.  Unless the Execution preferences have been changed
  328. since you installed PIGGY, you should see a line of text such as the
  329. one below:
  330.  
  331.       Piggy contains $74.13
  332.  
  333. The format of the output is controlled by the Execution Preferences
  334. which may be reached from the 'Preferences' selection in the Special
  335. menu.  Notice also that the value in the cell 'piggy' has changed to
  336. the same value as the one listed.
  337.  
  338. ====|====Reporting on Cell Contents
  339. To see an alphabetic list of all the cells in the PIGGY web, together
  340. with the value of each cell, you may select 'Report' from the 
  341. Special menu.  The following list should appear (your values may
  342. be different):
  343.  
  344.     dimes 231
  345.     half_dollars 43
  346.     home
  347.     nickels 242
  348.     pennies 1343
  349.     piggy 74.13
  350.     quarters 0
  351.     silver_dollars 4
  352.  
  353. If you did not get such a list, it may be because you changed the
  354. Report preferences accessible from the 'Preferences' entry of
  355. the Special menu.
  356.  
  357. SECOND TUTORIAL
  358.  
  359. Our goal for this tutorial is to create a new, empty web, to add
  360. cells to it, and to create links between the cells.  To this end we
  361. will make a web which lists the names and addresses of several people
  362. we know, and also add a bit of useful information not usually found
  363. in such a list.
  364.  
  365. ====Making an Empty Web
  366. Position to the SpyderX icon in the system menu.  Hold down the
  367. PSION key, and press the 'N' key.  A dialog box will appear,
  368. asking you for the name of a new SpyderX file.  Type in the
  369. name 'Friends' and press Enter.  SpyderX will respond by showing 
  370. you the home cell of a web named 'Friends'.  Browsing forward
  371. or backward, you will see that home is the only cell in the web.
  372.  
  373. ====Adding Cells
  374. A new cell may be inserted into our web by using the 'Add', 'Linkto',
  375. or 'Goto' commands in the Cell menu.  For now choose 'Add', and answer
  376. the dialog with the name of someone with whom you are friendly or
  377. acquainted.
  378.  
  379.     If the "Bad Cell Name" dialog appears, it is probably because you
  380.     left a space between the person's first and last name.  Cell names
  381.     may not have spaces in them; but it is OK to use the underscore
  382.     character in place of the space you would normally use.
  383.     (Some software types like to jam words up together and indicate
  384.     separate words by the use of capitalization, as in WhatsInAName).
  385.  
  386.     If you repair this defect, and still get the "Bad Cell Name" dialog,
  387.     it may be because your friend's name begins with a number, such as
  388.     '3Cpo', or a special character, as in '#Sterling'.  All cell names
  389.     must begin with an alphabetic character.
  390.  
  391. If there is no cell which has the name you entered, one is created.
  392. You may type in whatever information you wish about this person,
  393. including, for example: address, phone number, height, weight, and
  394. number of outstanding parking tickets.  Keep in mind that you will be
  395. able to use the 'Find' command in the Edit menu to search your web on
  396. the information which you have entered.
  397.  
  398. Repeat the process of adding cells with names of associates until
  399. you have entered several persons into the little database.  Next we
  400. will enter connections between the people in the web.
  401.  
  402. ====Connecting the Cells
  403. Goto, Linkto, or Browse to the cell for the first person you entered,
  404. and enter the text field for that person.  Scroll down to the bottom
  405. of the text field, start a new line, and enter the words:
  406.  
  407.       TALKS TO:
  408.  
  409. Then enter the names of persons with whom you know that this person
  410. communicates on a daily basis.  If the person involved is already
  411. in your database, make sure you spell the name the same way as it
  412. appears in the cell name.  If the person involved is not already
  413. in your database, you may want to considering entering the person.
  414.  
  415. Go through the cells of the database, adding the links wherever you
  416. know them to exist, and adding persons where it seems appropriate.
  417. When you finish, you will not only have a list of acquaintances and
  418. whatever information you wish to keep about them; you will also have
  419. a map of information flow among your associates.
  420.  
  421. By setting the report preferences to InPointers or OutPointers and
  422. choosing Report from the Special menu, you can see a report on this
  423. information flow.
  424.  
  425. If you are like many engineers, you probably don't care how information
  426. travels among your associates.  Nevertheless, the exercise can be useful.
  427. If you tell a fascinating fact to one of the persons in your database,
  428. you can use the connections to predict who will know that fact after a
  429. day or so.
  430.  
  431. The point here is that we are in the habit of thinking about the objects
  432. in our databases, whereas we might benefit from thinking as well about
  433. the connections between them.  With SpyderX, this is easy to do.
  434.  
  435. ====Searching the Web
  436. In addition to following chains of links which you type into the text
  437. field of the web, you can use the 'Find' function in the Edit menu to
  438. go to the next cell having a specified text string, or to the closest
  439. previous cell having a specified text string.  Your search may be case
  440. sensitive or not.  You may set default search preferences by obtaining
  441. the Preferences dialog (choose Preferences from the Special menu), and
  442. then choosing 'Searching' from that dialog.
  443.  
  444. ====Saving the Web
  445. To save the database you have made, choose 'Save As' from the File menu,
  446. and answer the dialog with the name you have chosen for your web.  You
  447. may include, or not include the suffix 'web', as you wish.  If you use
  448. another suffix, the web will be saved with that suffix.
  449.  
  450. SPYDERX OUTPUT
  451. ====Purpose of SpyderX's Output
  452. SpyderX is a personal, portable scratchpad for thinking about complex
  453. phenomenon, systems, and relationships.  It is not intended to communicate
  454. the results of that thought to others.  SpyderX does not generate
  455. elaborate reports, or visualize the result of mathematical calculations.
  456. Instead it provides flexible, primitive tools to format output and
  457. results in a way that can be understood by the user, and transferred
  458. to other programs or computers for further analysis.
  459.  
  460. ====Kinds of Output
  461. The next two subsections describe the kinds of output generated by the
  462. SpyderX program.  Subsequent sections will introduce further information
  463. on the mechanics of controlling that output.
  464.  
  465. ====Report Output
  466. The SpyderX 'Report' entry, in the Special menu, permits the user to
  467. select some or all of the name, text, formula, or value information
  468. in some or all of the cells, and format it into simple ASCII text streams
  469. which are conveyed to the current output destination of the program.
  470. This feature permits the user to create indexes of webs, list for analysis
  471. the formulas involved in a web, perform complex recombinations of cell
  472. contents, dump web contents to files for upload to a host computer,
  473. and to generate so-called "comma-separated text" files for exporting
  474. SpyderX data to databases and other programs.
  475.  
  476. Also available are cross-reference reports called "InPointers" and 
  477. "OutPointers", which assist in understanding the structure of a web;
  478. and the report called "Trail", which may be used to keep track of
  479. your current hierarchic position resulting from a sequence of
  480. "linkto" or "hunt" requests.
  481.  
  482. ====Execution Output
  483. For script execution, there are two kinds of output.  The first is
  484. automatic output, which may be generated without any specific request
  485. from the user; and the second is script output, which is generated
  486. by "out" and "report" statements within the script fields of cells.
  487.  
  488. ====|====Automatic Output
  489. This kind of output is selected in the Execution Preferences dialog
  490. box.  Its purpose is to provide output from script executions which
  491. are composed purely of formula evaluation (without "out" or
  492. "report" statements).  In the Execution Preferences dialog box, the
  493. user may choose between no output, generic output, and formatted
  494. output.
  495.  
  496. ====|====|====No Output
  497. If the user chooses no output, no automatic results will be directed
  498. to the current output destination, although the value fields of affected
  499. cells will be updated.
  500.  
  501. ====|====|====Generic Output
  502. Generic output consists of a title line containing a list of all the
  503. cells computed in a calculation; followed by one line per iteration
  504. containing the values of each of those cells at the end of the iteration.
  505. Below is a sample of generic output for an iterative calculation:
  506.  
  507.     apr,month,itm,prin,pmyt
  508.     0.075,1,137.09,21593.41,481
  509.     0.075,2,134.96,21249.51,481
  510.     0.075,3,132.81,20903.46,481
  511.     0.075,4,130.65,20555.27,481
  512.     0.075,5,128.47,20204.92,481
  513.     0.075,6,126.28,19852.39,481
  514.     0.075,7,124.08,19497.67,481
  515.     ...........................
  516.  
  517. ====|====|====Formatted Output
  518. Formatted output consists of an optional title line derived from a
  519. format string, followed by one line per iteration of the values of cells
  520. specified in the format string; separated by the other characters
  521. of the format string.  One could format the output for the calculation
  522. whose generic output is shown above, to read as follows:
  523.  
  524.     for month 1, principal remaining is 21593.41
  525.     for month 2, principal remaining is 21249.51
  526.     for month 3, principal remaining is 20903.46
  527.     for month 4, principal remaining is 20255.27
  528.     for month 5, principal remaining is 20204.92
  529.     for month 6, principal remaining is 19852.39
  530.     ............................................
  531.  
  532. Formatted output will be described in greater detail in the section
  533. called "Formatted List" below.
  534.  
  535. ====|====Script Output
  536. See the section on the script language for information on how to
  537. create script output.
  538.  
  539. ====Choosing Output Destinations
  540. Output of reports or calculations may be directed to the screen, to a
  541. cell within the web, or to a file in the Psion's memory.  To set the
  542. output destination, select the 'Preferences' entry in the Special menu.
  543. A dialog menu with the following contents will appear:
  544.  
  545.     Preferences for:
  546.     * Input
  547.     * Output
  548.     * Numbers
  549.     * Execution
  550.     * Searching
  551.     * Report
  552.  
  553. Choose the 'Output' choice to reach the Output Preferences dialog,
  554. which contains the following contents:
  555.  
  556.     Output Preferences:
  557.     * Destination   <- File ->
  558.     * Dest Name       mugga
  559.     * Newline Type  <- CRLF ->
  560.  
  561. When output is directed to the screen, it is displayed one screen at a
  562. time, with a prompt before the next screen is displayed.  
  563.  
  564. When output is directed to a file or to a cell, the name of the file or
  565. cell is entered by typing it into the Dest Name field of the dialog. 
  566.  
  567. When output is directed to a file, the type of newline generated can be
  568. controlled by the third entry in the Output Preferences dialog. If the
  569. output will be exported to an IBM compatible computer, it is a good idea
  570. to use the 'CRLF' option for newline.  If the output will remain on the
  571. Psion, or will be exported to a Macintosh or Unix computer, the LF option
  572. works better.
  573.  
  574. NOTE: Although the web itself may be saved, File output from the web
  575. is not permitted in the unregistered version of SpyderX.
  576.  
  577.  
  578. ====Specifying Report Output
  579. To specify what information will appear in Report output; select the
  580. Special menu, and choose the 'Preferences' entry. The Preferences
  581. dialog (shown above) will appear.  Select 'Report' from that dialog,
  582. and the Report Preferences dialog will appear:
  583.  
  584.     Report Preferences
  585.     * Report on All Cells?  <-Yes->
  586.     * Report Type          <- Formatted ->
  587.     * Report Format       \n\N\n\V\n\F\n\T
  588.  
  589. The first question in the dialog tells SpyderX whether or not to report
  590. on all cells.  The second tells it what kind of report to generate.  The
  591. third tells it which information to include for each cell in a formatted
  592. report, if that is the type of report that is selected.
  593.  
  594. ====|====Report Cell Selection
  595. Answering Yes to the  "Report on All Cells?" question will assure that
  596. when the user elects to generate a report, all of the cells in the web
  597. will be reported, according to the format specified.  Answering No will
  598. cause the report function to select a subset of the cells in the web.
  599.  
  600. The subset of cells selected for reporting depends upon an algorithm
  601. executed by the report function.  If there is a highlighted text selection
  602. in the active edit box at the time a report is requested, SpyderX will
  603. scan that selection for valid cell names, and generate a report on all
  604. the cells named in that selection, in the order in which they appear.
  605. If there is no highlighted selection in the active edit box, SpyderX
  606. will generate a report on the current cell only.
  607.  
  608. ====|====Report Type
  609. There are four types of reports.  They are the Formatted report,
  610. the InPointers report, the OutPointers report, and the Trail
  611. report.
  612.  
  613. ====|====|====The Formatted Report
  614. The appearance of a formatted report depends upon the content of the
  615. Report Format string in the Report Preferences dialog.  If nothing is
  616. entered in the report format string, no output will be generated when
  617. Report is chosen from the Special menu.
  618.  
  619. If the report format string is not empty, then choosing Report from
  620. the Special menu will cause that string to be scanned and interpreted
  621. for each cell in the selected cell list.
  622.  
  623. When the report format string is interpreted for a cell, most
  624. characters in the string are copied directly to the output destination.
  625. Substitutions are made; however, for character pairs which begin with
  626. the backslash (\).  The substituted text is copied to the output in the
  627. place of those character pairs.
  628.  
  629. Character pairs for which substitutions are made during interpretation
  630. of the report format string are:
  631.  
  632. '\n'    A newline sequence is copied to the output in the place of
  633.         a backslash followed by a lower case n.
  634.  
  635. '\N'    When upper case N appears in the report format after the
  636.         backslash character, the report generator substitutes for the
  637.         pair of characters the name of the cell for which the format
  638.         string is being interpreted.
  639.  
  640. '\V'    Backslash-V causes the value of the cell to be substituted for
  641.         the two characters.
  642.  
  643. '\F'    Backslash-F is replaced in the report by the formula field of
  644.         the cell being interpreted by the report formatter.
  645.  
  646. '\T'    Backslash-T results in the outputting of the text field of the
  647.         cell being reported.
  648.  
  649. Any other two character sequence beginning with a backslash will cause
  650. the second character only to be output to the report.  This includes
  651. the string '\\' which is replaced in the output by a single backslash.
  652.  
  653. If the report format string is not empty, but neither does it contain
  654. any of the character sequences above, it will be copied verbatim to
  655. the output once for each cell which has been selected.
  656.  
  657. ====|====|====InPointers Report
  658. For each cell in the report cell selection, this report outputs a
  659. list of all the other cells in the web which contain references
  660. in the selected field (text or formula) to the cell.
  661.  
  662. ====|====|====OutPointers Report
  663. For each cell in the report cell selection, this report outputs
  664. a list of all the other cells to which the selected field (text 
  665. or formula) of this cell refers.
  666.  
  667. ====|====|====Trail Report
  668. The Trail Report merely lists from most recent to most ancient,
  669. all of the cells placed on the Trail by Linkto requests, that have
  670. not yet been popped off by Unlink requests.
  671.  
  672. ====Sample Reports
  673. Below you will find described the way in which reports are formatted
  674. for some of the sample webs included with the SpyderX distribution.
  675.  
  676. ====|====Websites
  677. The web called "Websites" is a list of some of the World Wide Web
  678. sites.  Each cell contains a description of a single WWW home page.The
  679. report format string for 'Websites' is  "\n\N\n\F".  The report
  680. preference dialog question about whether to report all cells is
  681. answered "Yes".
  682.  
  683. When you choose 'Report' from the Special menu, what you get is a list
  684. of the names of all the cells in the Websites web, along with their
  685. URL addresses:
  686.  
  687. CIA
  688. http://www.odci.gov/
  689.  
  690. GettingYourHomePageOnTheWeb
  691. http://www.homecom/global/pointers.html
  692.  
  693. home
  694.  
  695. InternationalCurrencyExchange
  696. http://www.dna.lth.se/cgi-bin/rates
  697.  
  698. LaughWEB
  699. http://www.misty.com/laughweb/index.html
  700.  
  701. .........
  702. .........
  703.  
  704. ====|====Finance
  705. The web called "Finance" allows you to compute the monthly payment
  706. necessary to pay off a loan of a given amount, at a prescribed
  707. interest rate, in a specified number of monthly payments.
  708.  
  709. Sometimes, when you are working on a calculation, it helps to see all
  710. of the formulas on the same screen or page.  The report format string
  711. of the Finance web is:
  712.  
  713.     \n\N:=\F
  714.  
  715. When a report of all cells is generated from the Finance web using this
  716. string, the result is:
  717.  
  718.     apr:=
  719.     home:=pymt!
  720.     i:=apr/12
  721.     n:=
  722.     power:=pow(1+i,n)
  723.     prin:=
  724.     pymt:=prin*i!*power!/(1-power)
  725.  
  726. which is a list of the formulas used in computing the payment
  727. due on a note with a specified principal, apr, and number of periods.
  728.  
  729. ====|====Quotes
  730. The web called Quotes has a report fomat string that can be used to
  731. copy the contents of the web, except for the value field, into a single
  732. stream, which may be saved into a file for upload, or scanned as it
  733. goes by on the LCD screen.  The format string reads:
  734.  
  735.     "\n\T\n          --\N\n"
  736.  
  737. Here is a selection of the output:
  738.  
  739.      My work is being destroyed almost as soon as it is printed.
  740.      One day it is being read; the next day someone's wrapping fish in it.
  741.                            --Al_Capp
  742.  
  743.      If we had no faults, we should not take so much pleasure in
  744.      noticing them in others.
  745.                            --Duc_De_La_Rochefoucauld
  746.  
  747.      He who knows does not speak.
  748.      He who speaks does not know.
  749.                            --Lao_Tzu
  750.  
  751. ====|====Pert
  752. This web computes the critical path time to completion of a
  753. construction project.  The report format string has been arranged to
  754. print a comma-separated text file of the task name, and completion time
  755. for every cell in the web.  The report format string is:
  756.  
  757.     \n"\N","\V"
  758.  
  759. The resulting report is:
  760.     "BuildFoundation","3.3"
  761.     "BuildUpperStructure","17.5"
  762.     "ClearLand","1.5"
  763.     "CompleteExterior","12"
  764.      .........
  765.  
  766. To change the order in which the cells come out, answer No to the
  767. question in the report preferences dialog about whether you want
  768. to report on all cells.  Then create a list of the cell names in
  769. the order in which you want them to appear, select the list and
  770. choose 'Report' from the Special menu.
  771.  
  772. The Pert web is also a good example of the utility of the InPointers
  773. report.  If we request an InPointers report for the text fields of all
  774. the cells in Pert, we obtain:
  775.     BuildFoundation
  776.         <ClearLand
  777.         <path1
  778.         <path2
  779.         <path3
  780.     BuildUpperStructure
  781.         <BuildFoundation
  782.         <path1
  783.         <path2
  784.         <path3
  785.     ClearLand
  786.         <home
  787.         <path1
  788.         <path2
  789.         <path3
  790.     CompleteExterior
  791.         <BuildUpperStructure
  792.         <path3
  793.     CompleteInterior
  794.         <ElectricalWork
  795.         <path1
  796.         <path2
  797.         <PlumbingWork
  798.     ....
  799.     ....
  800.  
  801. Not only does this report show us the prerequisites for beginning each
  802. task in the construction project, it shows to which path or paths each
  803. task in the project belongs.
  804.     
  805. COMPUTING WITH SPYDERX
  806.  
  807. In this section is described the mechanism by which SpyderX
  808. script execution is invoked, the method of specifying computation output,
  809. the rules of evaluation used by the SpyderX script interpreter, and examples
  810. which illustrate the use of those rules.
  811.  
  812. ====Invoking a Script
  813. If necessary, set execution preferences by accessing the Execution
  814. Preferences dialog accessible from the Preferences choice of the
  815. Special menu.  Position to a cell which contains a script which you
  816. wish to execute.  Choose 'Execute' from the Special menu.  The script
  817. of the cell will be executed, and if there is a result returned, it
  818. will be placed into the value field of the cell.  If the script or
  819. formula contains references to other cells, followed by exclamation
  820. points or argument lists, the formulas of those cells too, will be
  821. executed.  If Execution preferences call for Results to be output,
  822. the results of the calculation will be directed to the current output
  823. stream.
  824.  
  825. ====Contents of Script Fields
  826. Script fields may contain sequences of script language statements,
  827. which are evaluated in order.  The arithmetic expression is a special
  828. kind of script language statement, often called a formula, whose
  829. execution causes the value of the cell in which it is executed to be
  830. set to the value of the expression.  Examples of valid contents of
  831. script fields are shown below:
  832.  
  833.     a14+25*x             # arithmetic expression
  834.  
  835.     2                    # arithmetic expression
  836.  
  837.     2 xx! (y-14)         # sequence of arithmetic expressions
  838.  
  839.     if(y<1) {            # if statement
  840.        14
  841.     } else {
  842.        21
  843.     }
  844.  
  845.     subprogram1!         # sequence of script language statements
  846.     subprogram2(14.3)
  847.     while(x>4) {
  848.         subprogram3(x)
  849.         set x to x+1
  850.     }
  851.     x-4
  852.  
  853. See the section entitled 'Script Language Grammar' for details
  854. on the permissable contents of script fields.
  855.  
  856.  
  857. ====Rules for Refering to Other Cells in Scripts
  858. SpyderX allows the script of one cell to contain references to other
  859. cells.  There are two kinds of references: execution (cellname followed
  860. by exclamation point or argument list), and value (cell name
  861. not followed by exclamation point or argument list) references.
  862.  
  863. ====|====Execution References
  864. An execution reference to a cell causes that cell's script to be
  865. executed and the subsequent value of the cell to be substituted for
  866. the reference.  The execution reference works like a function call 
  867. in a programming language, with the name of the referenced cell
  868. analogous to the function name.  Examples of execution references:
  869.  
  870.        cellname!   or    cellname()         (these two equivalent)
  871.        cellname(expr,1+3/other_cell_name)   (arguments specified )
  872.  
  873. ====|====Value References
  874. A value reference to a cell causes that cell's value to be substituted
  875. for the reference.  The script of the cell is not reexecuted.  The
  876. value reference works just lilke a variable reference in most
  877. programming languages.  The cellname is analogous to the variable
  878. name.
  879.  
  880. ====|====Execution() References
  881. The example below illustrates a simple application of the execution cell
  882. reference!
  883.  
  884. The web Example1 has two cells, a and b.  Their values and formulas
  885. are shown below:
  886.  
  887.     Web Example 1
  888.     Cell a value:3
  889.     Cell a formula:b!-4
  890.  
  891.     Cell b value:blank
  892.     Cell b formula:13+4
  893.  
  894. When cell a is calculated, the b! in its formula is resolved by
  895. computing a value for b, and substituting it into the formula for a.
  896. When the computation is done, the value in b is 17, and the value in
  897. a is 13. The new values of a and b are independent of their previous
  898. values.
  899.  
  900. In the web Example2, the formula in cell a contains an execution
  901. reference to the formula in cell b, and the formula in cell b contains
  902. an execution reference to the formula in cell a.
  903.  
  904.     Web Example 2
  905.     Cell a value:4
  906.     Cell a formula:b!-1
  907.  
  908.     Cell b value:14
  909.     Cell b formula:a!+2
  910.  
  911. When the formula for cell a is interpreted, the execution reference to b
  912. causes the program to first attempt to evaluate the formula in cell b.
  913. The formula in cell b, in turn, requires an interpretation of the formula
  914. in cell a.  This computation cannot be carried out, as it will repeatedly
  915. start new calculations of each cell until it runs out of memory, and
  916. a STACK OVERFLOW ERROR is generated.
  917.  
  918. ====|====Value References
  919. The example below illustrates how a calculation proceeds when
  920. cell references are not followed by exclamation points or 
  921. argument lists:
  922.  
  923. The web Example3 also has two cells, a and b, whose values and
  924. formulas are shown below:
  925.  
  926.     Web Example 3
  927.     Cell a value:14
  928.     Cell a formula:b-7
  929.  
  930.     Cell b value:21
  931.     Cell b formula:a+4
  932.  
  933. When these cells are interpreted, a first, then b; the execution
  934. proceeds as follows:
  935.  
  936. Cell a is set to the value of cell b, 21, minus 7, or 14.
  937. Cell b is set to the new value of cell a, 14, plus 4, or 18.
  938.  
  939. When the two cells are interpreted, b first, then a, the execution
  940. takes a different path:
  941.  
  942. Cell b is set to the value of cell a, 14, plus 4 or 18.
  943. Cell a is set to the new value of cell b, 18, minus 7, or 11.
  944.  
  945. Since the cell references in each cell a and b were to the current
  946. value of the cell, and didn't request recalculation (like a reference
  947. followed by an exclamation point or argument list), there is no
  948. problem with stack overflow.
  949.  
  950. It is important when computing the values of cells which refer to
  951. each other to consider the order in which interpretation occurs.  This
  952. is necessary all the time in programming languages, but is less
  953. commonly necessary in cellular calculators.
  954.  
  955. ====Specifying Execution Output
  956. To specify what information will appear in Execution output;
  957. select the Special menu, and choose the 'Preferences' entry. The
  958. Preferences dialog (shown previously) will appear.  Select 'Execution'
  959. from that dialog, and the 'Execution Preferences' dialog will appear:
  960.  
  961.     Execution Preferences
  962.     * Executuion Results   <-FormattedList->
  963.     * List Format             %month,%prin
  964.     * Number of Iterations         1 
  965.  
  966. The first item in the dialog lets the user select whether results
  967. will be automatically output (without the use of 'out' or 'report'
  968. statements in script fields), and if so whether the format will be
  969. generic, or specified by the string which is entered in the second 
  970. dialog item. The third item tells SpyderX how many times to execute
  971. the script.
  972.  
  973. ====|====Execution Results
  974. One of three possible choices may be selected in this dialog item:
  975.  
  976. ====|====|====Don't List
  977. No automatic output is listed as a result of script execution.
  978. This choice provides the shortest time of execution.  Even though
  979. no automatic output is generated, you may view the results (at the
  980. end of the last iteration) by choosing to "Report" the values of
  981. cells of interest, or by using the browser to visit each cell for
  982. which a value is required.
  983.  
  984. ====|====|====Generic List
  985. Results are automatically presented for each cell executed. Typical
  986. generic output looks like that shown below:
  987.  
  988.     apr,month,itm,prin,pmyt
  989.     0.075,1,137.09,21593.41,481
  990.     0.075,2,134.96,21249.51,481
  991.     0.075,3,132.81,20903.46,481
  992.     0.075,4,130.65,20555.27,481
  993.     0.075,5,128.47,20204.92,481
  994.     0.075,6,126.28,19852.39,481
  995.     0.075,7,124.08,19497.67,481
  996.     ...........................
  997. This kind of output is primarily useful for cellular calculation
  998. output when it is desired to generate the result of a calculation
  999. with a minimum of effort.
  1000.  
  1001. ====|====|====Formatted List
  1002. For formatted listing, a header may or may not be presented, depending
  1003. upon the content of the List Format (line 2 of the dialog).
  1004.  
  1005. The content of the formatted result chunk generated for each iteration
  1006. depends upon rules described in 'Formatting Exectuion Results',
  1007. which is the next section.
  1008.  
  1009. ====|====|====Formatting Execution Results
  1010. ====|====|====|====Format of the Header Line
  1011. If the first character of the List Format is a tilde ('~'), no header
  1012. line is generated for the calculation.  If it is not a tilde, the
  1013. header line is generated in accordance with the following rule:
  1014.  
  1015.     A newline is output.  Then the contents of the List Format string
  1016.     are copied directly to the output, except that any percent signs
  1017.     in the format string are ignored.  Wherever the character pair
  1018.     '\n' appears in the List Format, it is replaced with a newline
  1019.     sequence.
  1020.  
  1021. ====|====|====|====Format of Each Iteration Chunk
  1022. The output generated at each iteration of a calculation depends upon
  1023. the content of the List Format string.  The manner of this dependence
  1024. is described in the rule below:
  1025.  
  1026.     The contents of the List Format string are scanned,
  1027.     and copied to the output until a percent ('%') sign is
  1028.     encountered.  The next word after the percent sign is
  1029.     read to determine if it is a valid cell name.  If it is,
  1030.     the current value associated with that cell is substituted
  1031.     for the cell name in the output string.  Scanning and outputting
  1032.     of the List Format string is then resumed until the next percent
  1033.     sign or the end of the string is reached.  Wherever the character
  1034.     pair '\n' appears in the List Format, it is replaced with a
  1035.     newline sequence.
  1036.  
  1037. NOTE: The selection of cells for formatted output is controlled
  1038. entirely by the format string, and has nothing to do with the
  1039. selection of cells for execution.  This is necessary so that you can
  1040. view only the requested cells at each iteration, regardless of how
  1041. many cells are calculated.
  1042.  
  1043. ====|====|====Execution Format Examples
  1044. ====|====|====|====Example 1
  1045. The List Format string in the Execution Preferences shown above,
  1046.  
  1047.     "%month,%prin"
  1048.  
  1049. will cause the following type of output to be generated if both
  1050. cells are executed:
  1051.  
  1052.     month,prin
  1053.     1,159820.00
  1054.     2,159638.88
  1055.     3,159456.62
  1056.     4,159273.22
  1057.     5,159088.68
  1058.     6,159902.98
  1059.     ...........
  1060.  
  1061. If, on the other hand, the cell called 'month' was accidentally left
  1062. out of the calculation, but not the format, the output would look
  1063. more like:
  1064.  
  1065.     month,prin
  1066.     1,159820.00
  1067.     1,159638.88
  1068.     1,159456.62
  1069.     1,159273.22
  1070.     1,159088.68
  1071.     1,159902.98
  1072.     ...........
  1073.  
  1074. ====|====|====|====Example 2
  1075. The web called 'Pert' provides an example of a List Format string used
  1076. for a script interpretation when there is only one iteration, and the
  1077. outcome is to be displayed for only one cell:
  1078.  
  1079.     "~The Critical Path takes %CriticalPath days."
  1080.  
  1081. In this case, the starting tilde eliminates the header chunk, and the
  1082. output looks like:
  1083.  
  1084.     The Critical Path takes 43.5 days.
  1085.  
  1086. Were the tilde removed from the front of the Format List, the output
  1087. would look like:
  1088.  
  1089.     The Critical Path takes CriticalPath days
  1090.     The Critical Path takes 43.5 days
  1091.  
  1092. ====|====|====|====Example 3
  1093. Use of the '\n' character pair in the format string can cause multiple
  1094. lines to be output for each iteration.  Consider the format string:
  1095.  
  1096.    "Mtrx: %a1,%a2,%a3\n           %b1,%b2,%b3\n           %c1,%c2,%c3"
  1097.  
  1098. If we assume that all of the matrix elements are scheduled for
  1099. recalculation or included by reference, the output of two iterations
  1100. with this Format List might look like:
  1101.  
  1102.      Mtrx: a1,a2,a3
  1103.            b1,b2,b3
  1104.            c1,c2,c3
  1105.  
  1106.      Mtrx:32.0,31.5,14.1
  1107.           21.1,17.5,21.4
  1108.           3.5,1.2,2.3
  1109.  
  1110.      Mtrx:32.0,21.1,3.5
  1111.           31.5,17.5,1.2
  1112.           14.1,21.4,2.3
  1113.  
  1114.  
  1115. ====Sample Calculations
  1116.  
  1117. ====|====Circle
  1118. The area of a circle is easily computed in two cells:
  1119.  
  1120.     cellname           formula
  1121.      r                 (no formula...put value of radius in value field)
  1122.      AreaCirc          pi*r*r
  1123.  
  1124. The calculation is performed by positioning to the cell r, and entering
  1125. a value for the radius, and then positioning to the cell AreaCirc,
  1126. and choosing 'Execute' from the Special menu .  It is not
  1127. necessary to include a cell with the value of pi since this value
  1128. (as well as the value for the base of the natural logarithm e) is built
  1129. into the SpyderX program.
  1130.  
  1131. ====|====Payment
  1132. The web called "Payment" allows you to compute the monthly payment
  1133. necessary to pay off a loan of a given amount, at a prescribed
  1134. interest rate, in a specified number of payments.
  1135.  
  1136. The Payment web uses cells with the following formulas to compute the
  1137. monthly payment:
  1138.  
  1139.     cellname       formula
  1140.      apr         (no formula... enter annual periodic interest rate)
  1141.      home        pymt()
  1142.      i           apr/12
  1143.      n           (no formula... enter number of monthly payments)
  1144.      power       pow(1+i!,n)
  1145.      prin        (no formula... enter the beginning balance)
  1146.      pymt        prin*i!*power!/(1-power)
  1147.  
  1148. The user may use the following procedure to obtain a result from the
  1149. Payment web:
  1150.  
  1151.     1) Put the annual periodic interest rate into the value field
  1152.        of the apr cell.  Make sure that you use the decimal fraction
  1153.        (such as 0.075 for 7.5%).
  1154.  
  1155.     2) Put the beginning balance into the value field of the prin cell.
  1156.  
  1157.     3) Set the value of n to the total number of monthly payments.  This
  1158.        is twelve times the number of years that the loan is to run.
  1159.  
  1160.     4) Position to the pymt cell and select Execute from the Special menu.
  1161.  
  1162. Since the 'home' cell has the formula: pymt(), you may also compute
  1163. a result by positioning to the home cell and selecting 'Execute' 
  1164. from the Special menu.
  1165.  
  1166. Notice in the cell 'pymt' that the first occurance of 'power', and the
  1167. reference to 'i', are execution references.  The '!' after the first
  1168. power reference assures that the formula for 'power' is executed
  1169. whenever the formula for 'pymt' is executed.  There is no '!' after
  1170. the second reference to 'power' because it is not needed, the value
  1171. having already been computed.  The '!' after 'i' ensures that the
  1172. periodic interest is computed from the annual periodic interest rate,
  1173. 'apr', whenever pymt is computed.
  1174.  
  1175. ====|====Pert
  1176. One of the sample webs provided on the SpyderX distribution disk is
  1177. called Pert.  The Pert web describes the tasks involved in building
  1178. a small house, and organizes those tasks according to which may be
  1179. carried out concurrently.  There are three different paths through
  1180. the web of tasks, from start to completion.  The three different
  1181. paths may be browsed in the web by following hypertext links.  They
  1182. are also described in three summary cells called path1, path2, and
  1183. path3.  Those cells contain formulas which compute the total time
  1184. required to traverse the associated paths.
  1185.  
  1186.     cellname       formula
  1187.     path1            ClearLand+BuildFoundation+BuildUpperStructure+
  1188.                           PlumbingWork+CompleteInterior
  1189.     path2            ClearLand+BuildFoundation+BuildUpperStructure+
  1190.                           ElectricalWork+CompleteInterior
  1191.     path3            ClearLand+BuildFoundation+BuildUpperStructure+
  1192.                           CompleteExterior+Landscaping
  1193.  
  1194. By entering the estimated time it takes to complete each of the tasks
  1195. into each task's cell, the times taken for each path through the process
  1196. may be computed from the formulas.
  1197.  
  1198. Pert has another cell and formula:
  1199.  
  1200.     CriticalPath     max(path1!,path2!,path3!)
  1201.  
  1202. When the web is positioned to the CriticalPath cell, and the 'Execute'
  1203. function is chosen from the Special menu, the time necessary to build
  1204. the house is placed into the value field of the cell CriticalPath.
  1205.  
  1206. The '!'s after the references to path1, path2, and path3
  1207. ensure that new values for these cells are computed every time
  1208. the cell CriticalPath is executed.  If the '!'s were not there,
  1209. it would be possible to change values upon which the path1, path2,
  1210. or path3 values depend, and to compute CriticalPath without the
  1211. new values being reflected in the values of path1, path2, or path3.
  1212. Therefore the value of CriticalPath would not be changed, even
  1213. though, for instance, the value for ClearLand did change.
  1214.  
  1215. The function of this web would not change if every use of the
  1216. exclamation point, !, were changed to the parenthesis pair ().
  1217.  
  1218. ====|====Logistic
  1219. The emergence of chaotic dynamics from simpler behavior may be observed
  1220. in this example called the logistic map:
  1221.  
  1222.     cellname        formula
  1223.      r             (no formula...set this parameter to alter dynamics)
  1224.      x              r*x*(1-x)
  1225.  
  1226. To explore the behavior of this calculation, set the number of iterations
  1227. to 20 or so, set different values for r and x (make sure x is between
  1228. zero and one), go to cell x, and chose 'Execute' from the Special menu.
  1229.  
  1230. For a value of the parameter r of 0.4, and an initial x value of 0.7,
  1231. successive values of x approach zero and stay there.
  1232.  
  1233. For an r value of 2.4, and initial x value of 0.7, successive values
  1234. of x approach a constant 0.583
  1235.  
  1236. For r=3.0, and an initial x of 0.5, an extended damped oscillation
  1237. takes place between two values of x.
  1238.  
  1239. For r=3.5, initial x=0.7; an extended oscillation among four numbers
  1240. takes place.
  1241.  
  1242. For r=3.8, initial x=0.7; a chaotic sequence of numbers is the result.
  1243.  
  1244. ====|====Amort
  1245. This sample web computes the approximate principal balance and amount
  1246. paid in interest each month, given an annual periodic interest rate,
  1247. and the principal balance the previous month.  The cells of the web,
  1248. and the formulas they contain are:
  1249.  
  1250.     cellname       formula
  1251.      apr       (No formula....constant entered by user)
  1252.      home          month! prin!
  1253.      itm           mi!*prin
  1254.                (computed monthly interest rate times principal)
  1255.      mi            apr/12  (annual periodic interest rate/12)
  1256.      month         month+1   (number of the month...start at 0)
  1257.      prin          if(prin>pymt) {  ( this month's principle recomputed)
  1258.                        prin+itm!-pymt
  1259.                    } elseif (prin>0) {
  1260.                        0
  1261.                    } else {
  1262.                        exit
  1263.                    }
  1264.      pymt      (No formula....constant payment amt entered by user)
  1265.  
  1266. The reference to mi in the formula itm, and the reference to itm
  1267. in the formula prin are execution references to make sure that the
  1268. values of mi and itm are recomputed before they are used on the first
  1269. iteration of the calculation.
  1270.  
  1271. The formula in the prin cell illustrates the use of the if structure
  1272. to control the number of iterations actually computed (no more than
  1273. necessary to reach zero principal).
  1274.  
  1275. The formula in the 'home' cell illustrates the use of multiple
  1276. expressions in a single formula.  The expressions are evaluated
  1277. from left to right.  Since these are execution references, the
  1278. cells referred to are recomputed each time 'home' is evaluated.
  1279. After each expression is evaluated, the value of 'home' is set to
  1280. the value of the expression.  Thus, when execution is complete,
  1281. the value of 'home' is found to be the same as the value of 'prin'.
  1282.  
  1283. To use this web, put the beginning principal into 'prin', the annual
  1284. periodic interest rate, as a decimal fraction, into 'apr', the
  1285. monthly payment into 'pymt', and initialize the 'month' to 0.  Set the
  1286. number of iterations (see Execution Preferences) somewhat larger
  1287. than you expect the number of required months to be, position to the
  1288. 'home' cell, and choose 'Execute' from the Special menu.  The monthly
  1289. change in principal will be displayed as the calculation progresses.
  1290. Negative amounts indicate money accumulating rather than money being
  1291. paid out.
  1292.  
  1293. ====|====RKutta
  1294. There is a method of iteratively solving second order differential
  1295. equations which is called Runge-Kutta.  By applying this method of
  1296. solution to the equation for simple harmonic motion;
  1297.  
  1298.     y''=-ay
  1299.  
  1300. one may obtain the following formulas, which we can program into a web:
  1301.  
  1302.     cellname      formula
  1303. ---------------------------------
  1304.       home         yold! ypold! y! yp!
  1305.       h            (no formula...value is set to stepsize)
  1306.       a             constant parameter chosen by user
  1307.       yold         y
  1308.       y            yold+(k1!+4*k2!+k3!)/6
  1309.       ypold        yp
  1310.       yp           ypold+(k1p!+4*k2p!+k3p!)/6
  1311.       k1           h*ypold
  1312.       k2           h*(ypold+k1p!/2)
  1313.       k3           h*(ypold+2*k2p!-k1p!)
  1314.       k1p        -a*h*yold
  1315.       k2p        -a*h*(yold+k1!/2)
  1316.       k3p        -a*h*(yold+2*k2!-k1!)
  1317.  
  1318. Set initial values for for 'y' and 'yp'.  Set 'a' to a positive value,
  1319. position to the 'home' cell, and choose 'Execute' from the Special menu to
  1320. see a computed solution to this differential equation.
  1321.  
  1322. This example illustrates the use of multiple expressions within
  1323. the same formula.  The home cell contains a sequence of four
  1324. execution references to yold, ypold, y and yp.  This causes the
  1325. current values of y and yp to be placed into yold, and then
  1326. new values to be computed based upon those old values. 
  1327.  
  1328.  
  1329. BUILT IN FUNCTIONS
  1330.  
  1331. We have seen in the examples some of the built-in functions supplied
  1332. by SpyderX.  In this section we list each built-in function, and any
  1333. information necessary for its use.
  1334.  
  1335. ====min(expr1,expr2,expr3,...)
  1336. This function returns the minimum of the values of the expressions
  1337. denoted by expr1, expr2, expr3, ...etc.
  1338.  
  1339. ====max(expr1,expr2,expr3,...)
  1340. This function returns the maximum of the values of the expressions
  1341. denoted by expr1, expr2, expr3, ...etc.
  1342.  
  1343. ====mean(expr1,expr2,expr3,...)
  1344. This function returns the arithmetic mean of the values of the
  1345. expressions denoted by expr1, expr2, expr3, ...etc.
  1346.  
  1347. ====abs(expr)
  1348. This function returns the absolute value of the expression denoted
  1349. by expr.
  1350.  
  1351. ====sign(expr)
  1352. This function returns +1 if the expression expr evaluates to a
  1353. positive value, -1 if it evaluates to a negative value, and 0 if
  1354. it evaluates to 0.
  1355.  
  1356. ====stp(expr)
  1357. This function returns +1 if the expression expr evaluates to a
  1358. non-negative value (including 0), and 0 if it evaluates to a
  1359. negative value.
  1360.  
  1361. ====sig(expr)
  1362. This function returns the sigmoid logistic function of its
  1363. single expression argument:
  1364.  
  1365.                  sig(expr):= 1/(1+exp(-expr))
  1366.  
  1367. ====sin(expr)
  1368. This function returns the value of the sine of expr.  The value of
  1369. expr is assumed to be in the trigonometric units chosen in the
  1370. trigonometric units choice list of the 'Numbers Preferences' dialog
  1371. reached from the 'Preferences' choice in the Special menu.
  1372.  
  1373. ====cos(expr)
  1374. This function returns the value of the cosine of expr.  The value of
  1375. expr is assumed to be in the trigonometric units chosen in the
  1376. trigonometric units choice list of the 'Numbers Preferences' dialog
  1377. reached from the 'Preferences' choice in the Special menu.
  1378.  
  1379. ====tan(expr)
  1380. This function returns the value of the tangent of expr.  The value of
  1381. expr is assumed to be in the trigonometric units chosen in the
  1382. trigonometric units choice list of the 'Numbers Preferences' dialog
  1383. reached from the 'Preferences' choice in the Special menu.
  1384.  
  1385. ====asin(expr)
  1386. This function returns the value of the arcsine of expr.  The value
  1387. is returned in the trigonometric units chosen in the trigonometric
  1388. units choice list of the 'Numbers Preferences' dialog reached from
  1389. the 'Preferences' choice in the Special menu.  An invalid argument
  1390. will cause the value returned to be flagged "Not A Number".
  1391.  
  1392. ====acos(expr)
  1393. This function returns the value of the arccosine of expr.  The value
  1394. is returned in the trigonometric units chosen in the trigonometric
  1395. units choice list of the 'Numbers Preferences' dialog reached from the
  1396. 'Preferences' choice in the Special menu.    An invalid argument will
  1397. cause the value returned to be flagged "Not A Number".
  1398.  
  1399. ====atan(expr)
  1400. This function returns the value of the arctangent of expr.  The value
  1401. is returned in the trigonometric units chosen in the trigonometric
  1402. units choice list of the 'Numbers Preferences' dialog reached from
  1403. the 'Preferences' choice in the Special menu.  An invalid argument
  1404. will cause the value returned to be flagged "Not A Number".
  1405.  
  1406. ====sqrt(expr)
  1407. This function returns the non-negative square root of
  1408. the value of expr.
  1409.  
  1410. ====ln(expr)
  1411. This function returns the value of the natural logarithm of expr.
  1412. An invalid argument will cause the value returned to be flagged
  1413. "Not A Number".
  1414.  
  1415. ====exp(expr)
  1416. This function returns the value of e ( the base of natural logarithms)
  1417. raised to the power of expr.  An invalid argument or overflow will
  1418. cause the value returned to be flagged "Not A Number".
  1419.  
  1420. ====log(expr)
  1421. This function returns the value of the logarithm to the base 10
  1422. of expr.  An invalid argument will cause the value returned to be
  1423. flagged "Not A Number".
  1424.  
  1425. ====pow(expr1,expr2)
  1426. This function returns the value of the first argument raised to
  1427. the power of the second.
  1428.  
  1429. ====rand()
  1430. This function returns a random number in the interval [0,1).  To
  1431. reseed the random number generator, call it with a single argument
  1432. which is the seed you wish to use, for example, rand(1365).
  1433.  
  1434. USER DEFINED FUNCTIONS
  1435. All scripts in SpyderX are user defined functions.  When referred to
  1436. with the exclamation point, !, or an empty argument list, (), they
  1437. are called with no arguments; and they return the most recent value
  1438. of the cell named.
  1439.  
  1440. When called with a list of arguments within parentheses, (a,b,c), the
  1441. script of the cell referred to may access the arguments with the
  1442. specifiers %1, %2, and %3.  %1 refers to the first argument, %2 the
  1443. second, and so on.  The execution reference returns the most recent
  1444. value of the cell named.
  1445.  
  1446. Within a called function (script referred to by execution reference),
  1447. the value of the cell (return value) may be set explicitly with a
  1448. set statement, or implicitly when the script interpreter encounters
  1449. and interprets an expression when it was looking for a statement.
  1450.  
  1451. MENUS AND PREFERENCES
  1452.  
  1453. ====SpyderX Menus
  1454. There are five SpyderX menus, called File, Edit, Cell, Browse, and Special.  The dialogs and functions invoked from these menus are described below:
  1455.  
  1456. ====|====File Menu
  1457. The File menu has three entries: New, Open, and SaveAs:
  1458.     *    New saves the contents of the current web, and creates a new,
  1459.          empty web with the name NEW.
  1460.     *    Open displays a dialog box into which the name of the file to
  1461.          be opened can be entered.  If the desired file is not in the
  1462.          \web\ directory, press TAB to enter the extended file open
  1463.          dialog.
  1464.     *    SaveAs displays a dialog box into which the name is entered
  1465.          under which the current web will be saved.  To save into a
  1466.          directory other than the current one, press TAB to enter
  1467.          the extended file dialog.  Once the target directory is
  1468.          located, press return to re-enter the dialog box for the
  1469.          file name.
  1470.  
  1471. ====|====Edit Menu
  1472. The entries in the Edit menu are Copy, Paste, Bring, and Find:
  1473.     *    Copy saves the current selection in the edit box to the
  1474.          clipboard. (Make a selection by holding down the shift key
  1475.          and moving the cursor to cover the text to be selected).
  1476.     *    Insert pastes the contents of the clipboard into the current
  1477.          cursor position.  There is no Delete in the edit menu.
  1478.          To delete the current selection in the edit window, press
  1479.          the Delete key.  The selected text will be removed from the
  1480.          edit window and saved in the clipboard.
  1481.     *    Bring checks to see if any other application capable of exporting
  1482.          text has a block of text selected.  If so, the most recent such
  1483.          selection is copied into the cursor position of the current
  1484.          pane of the current cell.  The selection is also pasted into
  1485.          to the clipboard for future Insert operations.
  1486.     *    Find searches forward or backward for the next occurrence of
  1487.          the currently selected text.  If no text is selected, a dialog
  1488.          box appears, which allows the entry of the text to search for,
  1489.          as well as the preferred direction of search.
  1490.  
  1491. ====|====Cell Menu
  1492. The entries in the cell menu are Add, Delete, Goto, Linkto, Hunt, and
  1493. Unlink:
  1494.     *    Add asks for the name of the cell to add.  Press Esc to cancel
  1495.          the request.  Otherwise, enter the new cell name and press
  1496.          enter.  If a cell with the new name already exists, a dialog
  1497.          will inform you of the fact, and ask if you wish to see that
  1498.          cell.  Otherwise, the new, empty cell will be displayed.
  1499.     *    Delete causes the current cell and its contents to be deleted,
  1500.          unless it is the home cell.  The home cell cannot be deleted.
  1501.     *    Goto transfers to a different cell, without saving the current
  1502.          cell into the backtrack(see Unlink).  If there is a cell name
  1503.          selected in the current edit window, that is the cell to which
  1504.          a transfer is made.  If not, a dialog appears, asking for the
  1505.          name of the cell to go to.
  1506.     *    Linkto saves the current cell into the backtrack, and transfers
  1507.          to a different cell.   If there is a cell name selected in the
  1508.          current edit window, that is the cell to which a transfer is
  1509.          made.  If not, a dialog appears, asking for the name of the
  1510.          cell to go to.
  1511.     *    Hunt scans from the current cursor position forward, looking
  1512.          for a cell name. If it finds one, it saves the current cell
  1513.          in the backtrack, and transfers to the cell whose name was
  1514.          found.
  1515.     *    Unlink returns to the cell most recently added to the trail.
  1516.          If there is no cell on the trail, Unlink goes to the home
  1517.          cell. The contents of the trail can be seen by choosing
  1518.          Trail from the browse menu.
  1519.  
  1520. ====|====Browse Menu
  1521. The cells in a web can be browsed in alphabetical sequence or reverse
  1522. alphabetical sequence by choosing Prev or Next from the Browse menu.
  1523.  
  1524. By choosing Overview, one may see a window containing the names of
  1525. all the cells in the web.  Position to a particular cell by using
  1526. the up or down arrows, or by typing the first character in the
  1527. cell name.  Pressing ENTER causes a linkto to the highlighted cell.
  1528. Pressing SHIFT-ENTER causes a goto to the highlighted cell.  Pressing
  1529. ESC causes an exit from the browser to the current cell.
  1530.  
  1531. Choose Trail to see the cells currently on the trail as a result
  1532. of previous linkto or hunt requests.  Pressing ENTER causes a linkto
  1533. to the underlined cell.  Pressing SHIFT-ENTER causes a goto to the
  1534. underlined cell.  Pressing ESC causes an exit from the browser to
  1535. the current cell.
  1536.  
  1537. ====|====Special Menu
  1538. The entries in the Special menu are About, Report, Execute,
  1539. Preferences, ZoomIn, ZoomOut, and Exit.
  1540.     *    About displays information about SpyderX.
  1541.     *    Report causes a report of the contents of the cells to be issued.
  1542.          The destination of the report output, and the content and format
  1543.          of the report are controlled by the Report entry of the
  1544.          Preferences dialog.
  1545.     *    Execute causes SpyderX to execute the script of the cell
  1546.          which is currently shown.  If that cell makes execution
  1547.          references to other cells, those cells too are executed.
  1548.          Input source, Output destination, Number format, and type
  1549.          of calculation are controlled by options reached from the
  1550.          Preferences entry of the Special menu.
  1551.     *    Preferences provides the means to control source of input,
  1552.          destination of output, format of numbers, parameters of
  1553.          execution, Search direction, and report format.
  1554.     *    ZoomIn allows the user to increase the font size.
  1555.     *    ZoomOut allows the user to decrease the font size.
  1556.     *    Exit causes the SpyderX program to stop executing and return to
  1557.          the system screen.
  1558.  
  1559. SPYDERX PREFERENCES
  1560.  
  1561. The 'Preferences' entry in the Special menu opens a dialog box that
  1562. gives the user the opportunity to set six different classes of
  1563. parameters to control the operation of the program.  The six categories
  1564. are: Input, Output, Numbers, Execution, Searching, and Report.
  1565.  
  1566. ====Input Preferences
  1567. Input preferences govern the source of script execution input, and
  1568. whether input is echoed to the output stream.  The three input options
  1569. are: Source, Source Name, and Echo Input?.
  1570.  
  1571. ====|====Source
  1572. Input source can be set to Keyboard, Cell, or File.
  1573.     *    If Keyboard input is chosen, the input stream is taken from
  1574.          input dialogs created by the IN statements in the script.
  1575.     *    If Cell input is chosen, the input stream is taken from the
  1576.          text field of the cell named in the Source Name selection.
  1577.     *    If File input is chosen, the input stream is derived from
  1578.          the file named in the Source Name selection.
  1579.          NOTE: This choice works only on registered copies of the program.
  1580.  
  1581. ====|====Source Name
  1582.     The source name string may be set to any valid cell name or 
  1583.     file name.
  1584.     If Input Source is set to 'Cell' and no Source
  1585.     Name is supplied, or if no such cell exists, a new cell called
  1586.     INPUT is created, and the program attempts to obtain its first
  1587.     value from that cell, resulting in an immediate end of file
  1588.     indication in the system variable called eof.
  1589.     If Input Source is set to 'File' and no name is supplied in
  1590.     Source Name, the file name INPUT is assumed.  If there is no
  1591.     file by the name in the Source Name string, execution of the
  1592.     script terminates with a File Does Not Exist error.
  1593.  
  1594. ====|====Echo Input?
  1595.     If Echo Input? is set to Yes, then characters which come in the 
  1596.     input stream are echoed to the output stream.  Otherwise, input
  1597.     characters are not echoed.
  1598.  
  1599. ====Output Preferences
  1600. Output preferences govern the destination, and to some extent, the format
  1601. of the output of calculations and reports.  The three output options
  1602. are: Destination, Destination Name, and Newline Type.
  1603.  
  1604. ====|====Destination
  1605. Output destination can be set to Screen, Cell, or File.
  1606.     *    If the Destination is set to Screen, output from reports
  1607.          and calculations appears one screen at a time on the LCD.
  1608.          After each screen the user is prompted to enter ESC to abort
  1609.          the calculation or report, or any other key to continue it.
  1610.     *    If the Destination is set to Cell, output from the calculation
  1611.          or report is copied to the end of the text area of the cell
  1612.          specified in the Destination Name option.  Since the capacity
  1613.          of the text area of a cell is limited to 2048 bytes, the text
  1614.          area only retains the last 2048 bytes of any output directed
  1615.          to it.
  1616.     *    When the destination is set to File, the output from
  1617.          calculations and reports is directed to the file named in
  1618.          Destination name.
  1619.          NOTE: This choice works only on registered copies of the program.
  1620.  
  1621. ====|====Destination Name
  1622. The Destination Name option provides a place for the user to enter
  1623. the cell or file name into which output from calculations or reports
  1624. is directed.  If the Destination name option is empty, or does not
  1625. contain a valid cell name when the Cell or File destination is
  1626. selected, output is directed to a cell or file called OUTPUT
  1627. (or OUTPUT.TXT).  If there is no cell (or file) called OUTPUT, one
  1628. is created.
  1629.  
  1630. ====|====Newline Type
  1631. The third Output Option is the Newline Type Option, which applies only
  1632. when the output destination is File.  The option lets the user choose
  1633. between newlines composed of linefeeds, or newlines composed of
  1634. carriage returns, followed by linefeeds.  The former option is
  1635. preferred when the files will not be exported to other computers.  The
  1636. latter option is preferable if the files will be exported to a
  1637. PC-compatible computer.
  1638.  
  1639. ====Numbers Preferences
  1640. Numbers options govern the format of calculation results, number of
  1641. decimal places, and units of angular measure..  The three Number
  1642. options are:  Format, Number Of Digits, and Trigonometry Units.
  1643.  
  1644. ====|====Format
  1645. The three Formats of numbers are General, Fixed, and Exponent:
  1646.     *    General numbers are floating point numbers with up to 15
  1647.          significant digits (a maximum of 24 digits overall)
  1648.     *    Fixed Numbers are fixed point numbers with the number of
  1649.          decimal places selected in the Number Of Digits option.
  1650.     *    Exponent Numbers are displayed in scientific notation with
  1651.          the number of significant digits specified in the Number of
  1652.          Digits option.
  1653.  
  1654. ====|====Number of Digits
  1655. The number of digits option describes the maximum number of significant
  1656. digits in General and Exponent numbers, and the number of decimal places
  1657. in the Fixed format numbers.
  1658.  
  1659. ====|====Trigonometry Units
  1660. The Trigonometry Units option can have the values of Degrees or Radians.
  1661. It governs the interpretation of arguments of trigonometric functions
  1662. and the presentation of results of inverse trigonometric functions.
  1663.  
  1664. ====Execution Preferences
  1665. In SpyderX, script execution is controlled by the Execution Preferences
  1666. dialog reached from the Preferences choice of the Special Menu.
  1667.  
  1668.     Execution Preferences
  1669.     * Execution Results    <- Formatted List ->
  1670.     * List Format            %month,%prin
  1671.     * Number of Iterations         1
  1672.  
  1673. ====|====Execution Results
  1674. This item refers to the automatic generation of output from
  1675. script execution.  One of three possible choices may be selected
  1676. in this dialog item:
  1677.  
  1678. ====|====|====Don't List
  1679. No automatic output is listed as a result of script execution.
  1680. This choice provides the shortest time of execution.  Even though
  1681. no automatic output is generated, you may view the results (at the
  1682. end of the last iteration) by choosing to "Report" the values of
  1683. cells of interest, or by using the browser to visit each cell for
  1684. which a value is required.
  1685.  
  1686. ====|====|====Generic List
  1687. Results are automatically presented for each cell executed. Typical
  1688. generic output looks like that shown below:
  1689.  
  1690.     apr,month,itm,prin,pmyt
  1691.     0.075,1,137.09,21593.41,481
  1692.     0.075,2,134.96,21249.51,481
  1693.     0.075,3,132.81,20903.46,481
  1694.     0.075,4,130.65,20555.27,481
  1695.     0.075,5,128.47,20204.92,481
  1696.     0.075,6,126.28,19852.39,481
  1697.     0.075,7,124.08,19497.67,481
  1698.     ...........................
  1699. This kind of output is primarily useful for cellular calculation
  1700. output when it is desired to generate the result of a calculation
  1701. with a minimum of effort.
  1702.  
  1703. ====|====|====Formatted List
  1704. For formatted listing, a header may or may not be presented, depending
  1705. upon the content of the List Format (line 2 of the dialog).
  1706.  
  1707. The content of the formatted result chunk generated for each iteration
  1708. depends upon rules described in 'Formatting Exectuion Results',
  1709. which is the next section.
  1710.  
  1711. ====|====List Format
  1712. The List Format string is used to describe how to present the output
  1713. of each iteration to the user.  See the section entitled "Specifying
  1714. Execution Output" for complete information on the List Format.
  1715.  
  1716. ====|====Number of Iterations
  1717. The number of iterations is an integer between 1 and 65535.  It 
  1718. controls how many times the selected cells are calculated.  The
  1719. script language of SpyderX has other provisions for controlling the
  1720. number of iterations.  These are the 'for' statement, the 'while'
  1721. statement, and the 'do' statement.  These make it unnecessary to set
  1722. this preference to a number greater than 1 when other techniques are
  1723. in use.
  1724.  
  1725. ====Search Preferences
  1726. When the user selects Find from the Edit menu, a search is performed
  1727. for selected text, or text specified in a dialog box.  The Search
  1728. preferences apply to the operation of the Find Request.  The available
  1729. options are:  Search For, Search Direction, and Case Sensitive?
  1730.  
  1731. ====|====Search For
  1732. This is the string for which a search is made when the Find choice
  1733. is selected from the Edit menu.  No wild card characters or regular
  1734. expression specifiers are accepted here.  Enter just the character
  1735. string for which you are looking.
  1736.  
  1737. ====|====Search Direction
  1738. The choices here are Forward and Backward.  When a direction is chosen,
  1739. the next search (Find) operation proceeds from the current cursor
  1740. position in the current field of the current cell, in the direction
  1741. indicated.  If a match is not found in the current cell, the search
  1742. continues into the next cell in the direction indicated.  The search
  1743. ends when either a match is found, or the search returns in a giant
  1744. circle to the beginning or end of the field in the cell in which it
  1745. began.
  1746. NOTE: When searching backward, an instance of the target which is
  1747. the last string in the text of formula field of a cell may be missed.
  1748. This problem will be repaired in a future release.
  1749.  
  1750.  
  1751. ====|====Case Sensitive?
  1752. If -Yes- is selected for this option, a match is declared only when
  1753. text matches as to characters and case of each character.  Otherwise,
  1754. a character match alone is sufficient.
  1755.  
  1756. ====Report Preferences
  1757. Report Preferences are Report On All Cells?, Report Type, and
  1758. ReportFormat:
  1759.  
  1760. ====|====Report On All Cells?
  1761. This option allows the user to choose whether to apply the report
  1762. function to all cells in the web, or to a selection of cells.  See
  1763. the section entitled "Specifying Report Output" for a complete
  1764. discussion of this preference and its application.
  1765.  
  1766. ====|====Report Type
  1767. This option allows the user to choose between four different types
  1768. of reports: Formatted, InPointers, OutPointers, and Trail reports.
  1769.  
  1770. ====|====Report Format
  1771. The Report Format string allows the user to specify the contents of
  1772. the formatted report generated for each selected cell.  The rules
  1773. governing the syntax and interpretation of the report format string
  1774. are discussed in the section entitled "Specifying Report Output".
  1775.  
  1776. EXTENDED SCRIPT LANGUAGE
  1777. SpyderX allows script fields to consist of statements and 
  1778. expressions from a structured scripting language.  The next
  1779. sections describe the SpyderX Script Language in more detail.
  1780.  
  1781. ====Filter -- A Script Example
  1782. The web called Filter has eight cells, in which two kinds of
  1783. digital filters are illustrated.  The first is a finite
  1784. impulse response, or FIR filter, which averages three delayed
  1785. samples of an input signal, to produce a 'filtered' copy of
  1786. the signal.  The operation of the FIR filter is specified in
  1787. the script field of the cell called 'fir':
  1788.  
  1789.     set tap1 to 0
  1790.     set tap2 to 0
  1791.     set tap3 to 0
  1792.     out("\nFIR Filter Example")
  1793.     out("\ninput signal,output signal)
  1794.     while(not eof) {
  1795.         in("\n",INPUT)
  1796.         set tap3 to tap2
  1797.         set tap2 to tap1
  1798.         set tap1 to INPUT
  1799.         set fir to tap1/4+tap2/2+tap3/4
  1800.         out(",",fir)
  1801.     }
  1802.  
  1803. The first thing fir does is to zero the three signal
  1804. accumulation cells tap1, tap2, and tap3.
  1805.  
  1806. Then it begins a loop which will continue until it runs out
  1807. of input, which is received from the input stream one value
  1808. at a time in a cell called INPUT.
  1809.  
  1810. Each time an input value is received, it is shifted into the
  1811. three part delay/accumulator composed of tap1,tap2, and tap3.
  1812. Each time an input value is received, a weighted sum is taken
  1813. of the new values of tap1,tap2, and tap3.  The weighted sum
  1814. is stored temporarily in the cell fir, and output to the
  1815. output stream.  Then the loop goes back to get the next
  1816. input value.
  1817.  
  1818. For input like that shown below:
  1819.     0
  1820.     1
  1821.     1
  1822.     1
  1823.     1
  1824.     0
  1825.     0
  1826.     0
  1827.     0
  1828.     1
  1829.     1
  1830.     1
  1831.     1
  1832. the output looks like:
  1833. FIR Filter Example
  1834.     input signal, output signal
  1835.     0,0.00
  1836.     1,0.25
  1837.     1,0.75
  1838.     1,1.00
  1839.     1,1.00
  1840.     0,0.75
  1841.     0,0.25
  1842.     0,0.00
  1843.     0,0.00
  1844.     1,0.25
  1845.     1,0.75
  1846.     1,1.00
  1847.     1,1.00
  1848.  
  1849. ====Script Language Data Structures
  1850. There are three kinds of data structures in the SpyderX script
  1851. language: cells, system constants, and system variables.
  1852.  
  1853. ====|====Cells
  1854. Cells contain a unique name, a text field, a value, and a script
  1855. field.  Cells are referred to in the script language by their names.
  1856. Cellnames are 1 to 48 characters beginning with a letter, followed by
  1857. zero or more letters, digits, or underscore ('_') characters.
  1858.  
  1859. ====|====|====System Constants
  1860. There are three system constants: pi, e, and deg.  pi is always
  1861. interpreted as the value of the ratio of the circumfrence to the
  1862. diameter of a circle.  e is interpreted as the value of the base
  1863. of natural logorithms. deg is the number of degrees in a radian.
  1864.  
  1865. ====|====|====System Variables
  1866. There are six system variables: eof, RptFmtX, RptTypeX, NumFmtX,
  1867. NumDecX, and TrigUnitsX.  eof may be used in expressions.  It takes
  1868. the value 1 of the end of file has been reached on the input stream.  
  1869. Otherwise, eof takes the value 0.  eof may not be set by the script.
  1870. The remaining variables may be set using the set statement, but they
  1871. may not be used in expressions.
  1872.  
  1873. ====|====Cell References
  1874. References to cells in the script language are of two kinds:
  1875. value references and execution references. Value references consist
  1876. simply of the cell name. Execution references consist of the name of
  1877. the cell followed by an exclamation point, '!', or an argument list
  1878. enclosed in parentheses.
  1879.  
  1880. ====|====|====Value References
  1881. When a value reference appears in the script language, it is
  1882. interpreted by substituting the value of the cell indicated.
  1883.  
  1884. ====|====|====Execution Referrences
  1885. When an execution reference appears in the script language, it is
  1886. interpreted by executing the script of the named cell, with any
  1887. arguments supplied, and then substituting the (possibly new) value
  1888. of the cell executed.
  1889.  
  1890. ====|====Subscripted Cell References
  1891. To facilitate array operations and enhance control of subprogram
  1892. execution, subscripted cell references, both value references and
  1893. execution references, are allowed by the script interpreter.
  1894.  
  1895. A subscripted cell reference consists of a cell name followed by a
  1896. left bracket, followed by an expression, followed by a right bracket,
  1897. possibly followed by an exclamation point or argument list.  Examples
  1898. of valid subscripted cell references are shown below:
  1899.  
  1900.        a[1]
  1901.        a[1]!
  1902.        a[1]()
  1903.        a15[4+3*j](cellx,celly,1+cellz)
  1904.        newCell[a[24]!+5.1]
  1905.        x[sign(sin(y))]
  1906.        PanDowdy[newCell[a[24]!+5]!-21]
  1907.  
  1908. The meaning of a subscripted cell reference is as follows:
  1909. Imagine that the cells are arrayed in alphabetical order.  If the
  1910. subscript expression evaluates to the floating point number F,
  1911. N is the largest integer less than or equal to F, and the cell name is 
  1912. twizzle; then the subscripted reference is presumed to refer to the
  1913. Nth cell past twizzle in the alphabetical sequence of cells.  A
  1914. reference to a[0] is the same as a reference to a.  Subscripts less than
  1915. zero or to cells beyond the end of the sequence result in the
  1916. generation of a subscript error.
  1917.  
  1918. ====|====Comments
  1919. The # character, when it appears in a SpyderX script or input stream,
  1920. denotes the beginning of a comment.  The comment ends at the next
  1921. carriage return or line feed.
  1922.  
  1923. ====|====Script Language Statements
  1924. Each SpyderX script consists of zero or more statements.  If there are
  1925. no statements in the script when Execute is chosen from the Special menu,
  1926. then nothing happens.
  1927.  
  1928. If the execution of an empty script in cell a takes place as a result
  1929. of an execution reference from another script ( a! or a() ), the
  1930. value returned to the other script is the content of the value field
  1931. of cell a.  If there is nothing in the value field either, then the
  1932. value 0 is returned.
  1933.  
  1934. If the script of a cell contains legal statements in the script language,
  1935. whether executed from the menu, or from another script; the statements of
  1936. the script are interpreted in order until the script ends, or an exit 
  1937. statement is encountered.  When the script ends or is exited, control
  1938. returns to the calling script (the one which used the execution
  1939. reference), or to the SpyderX top level screen.
  1940.  
  1941. The statements of SpyderX script language are described and illustrated
  1942. below.  For more detailled information, see the section entitled
  1943. Script Language Grammar.
  1944.  
  1945.  
  1946.                     SET STATEMENT
  1947.  
  1948. The set statement consists of the word 'set' followed by a cell name,
  1949. the optional word 'to', and an expession.  The action of the interpreter
  1950. is to set the value of the named cell to the value arrived at by 
  1951. interpreting the expression.  The set statement:
  1952.  
  1953.     set home to 13-a*5
  1954.  
  1955. will obtain the value of the cell called a, multiply it by 5,
  1956. subtract the result from 13, and place the result into the cell
  1957. called home.  A slight variation on the statement:
  1958.  
  1959.     set home to 13-a!*5
  1960.  
  1961. will execute the script in the cell called a, (which may change the
  1962. value of cell a), obtain the (possibly new) value from cell a,
  1963. multiply it by 5, subtract the result from 13, and place the result
  1964. into the cell called home.
  1965.  
  1966. There is a variant of the set statement which may be used to change
  1967. certain configuration choices for SpyderX during script execution.
  1968. In the variant, a so-called configuration word is substitued for the 
  1969. cellname which follows the word set.  Configuration words and the
  1970. parameter changed are listed below:
  1971.  
  1972. Configuration           Parameter
  1973. word            changed
  1974. -----------------------------------------------------
  1975. RptFmtX            report format string
  1976. RptTypeX         report type
  1977.         (FORMATTED, INPTRS,OUTPTRS, or TRAIL)
  1978. NumFmtX            numeric format
  1979.         (FIXED, EXPN, or GENERAL)
  1980. NumDecX            expression for number of decimal
  1981.                     places, or significance of result (0-15)
  1982. TrigUnitsX    (DEGREES or RADIANS)
  1983.  
  1984. Examples of the set statement variant include:
  1985.  
  1986.     set RptFmtX to "\n\N=\V\n"
  1987.  
  1988.     set TrigUnitsX to RADIANS
  1989.  
  1990.  
  1991.                            IF STATEMENT
  1992.  
  1993. The If statement can take any one of the variants shown below:
  1994.  
  1995. if(a!=b) {
  1996.     zero or more statements
  1997. }
  1998.  
  1999. NOTE: (a!=b) does not mean a not equal to b.  it means execute
  2000. the script of cell a.  If the result is equal to b, then...)
  2001.  
  2002. NOTE:The contents of the parentheses in an if statement must
  2003. be an expression, conditional or arithmetic.
  2004.  
  2005. if(a<>b) {
  2006.     zero or more statements
  2007. } else {
  2008.     zero or more statements
  2009. }
  2010. (This is how you check to see if a is not equal to b.)
  2011.  
  2012.  
  2013. f(a<10) {
  2014.      zero or more statements
  2015. } elseif(a<5) {
  2016.      zero or more statements
  2017. } elseif(a<3) {
  2018.      zero or more statements
  2019. } elseif(....) {
  2020. .......
  2021. } else {
  2022.      zero or more statements
  2023. }
  2024.  
  2025.  
  2026.                           WHILE STATEMENT
  2027.  
  2028. The while statement looks like this:
  2029.  
  2030. while(expression) {
  2031.     zero or more statements
  2032. }
  2033. If the contents inside the parentheses evaluate to a non-zero value,
  2034. then the contents inside the curly braces will be repeatedly executed
  2035. until the expression in parentheses becomes zero.
  2036.  
  2037.  
  2038.                          DO STATEMENT
  2039.  
  2040. do {
  2041.     zero or more statements
  2042. } while ( expression )
  2043.  
  2044. SpyderX first executes the statements between the curly braces.  Then it
  2045. checks to see if the expression is non-zero.  If so, it executes the
  2046. statements between the braces again, and then checks to see if the 
  2047. expression is non-zero,... , and so on.
  2048.  
  2049. This statement differs from the while statement in that the statements
  2050. between the braces are always executed at least once.
  2051.  
  2052.  
  2053.  
  2054.                          FOR STATEMENT
  2055.  
  2056. There are two variants of the for statement:
  2057.  
  2058. for ( cellname=expression to expression step expression ) {
  2059.     zero or more statements
  2060. }
  2061.  
  2062. and
  2063.  
  2064. for(cellname=expression to expression) {
  2065.      zero or more statements
  2066. }
  2067.  
  2068. SpyderX executes the statements between the curly braces so long as
  2069. the value of cellname has not gone past the value of the second
  2070. expression, whether stepping from an initial value above or below
  2071. the ending value.
  2072.  
  2073. for instance, the statement:
  2074.      for(x=1 to 3) {
  2075.            out("mugga")
  2076.       }
  2077.  
  2078. executes the out statement three times; whereas the statement:
  2079.  
  2080.       for(x=3 to 3) {
  2081.              out("mugga")
  2082.        }
  2083.  
  2084. executes it once.
  2085.  
  2086. Also, the statement:
  2087.  
  2088.       for(x=3 to 1 step -1) {
  2089.              out("scud")
  2090.        }
  2091.  
  2092. causes the word scud to be output 3 times; whereas the statement:
  2093.  
  2094.        for(x= 3 to 1) {
  2095.            out("scud")
  2096.         }
  2097.  
  2098. will never output the word scud, since the step size is presumed to be +1.
  2099.  
  2100.  
  2101.                          IN STATEMENT
  2102.  
  2103. The format of the in statement is:
  2104.  
  2105.     in("this is a prompt",x,y,z,...,"\nthis is another prompt",a,b,....)
  2106.  
  2107. The in statement scans its argument list from left to right.  Each time
  2108. it encounters a string, it copies it to the current output (or sets
  2109. the input dialog prompt string if input is from the keyboard).  Each
  2110. time it encounters a cell name, the input statement scans the input
  2111. stream for a value to place into that cell.  If there is nothing else
  2112. in the input stream, it sets the eof system variable to 1.
  2113. Whenever "\n" appears as a string in an input statement, it is output
  2114. as a newline (unless the input is from keyboard).
  2115.  
  2116.  
  2117.                           OUT STATEMENT
  2118.  
  2119. The format of the out statement is:
  2120.  
  2121. out( sequence of expressions separated by commas )
  2122.  
  2123. Sample output statements:
  2124.  
  2125.     out("damned spot!",34,x+1,"whoof" cat "or all the seas with oysters")
  2126.     
  2127.     out("\nPounds of butter:",butter)
  2128.  
  2129. or
  2130.  
  2131.      out(x,y,z)
  2132.  
  2133. Whenever "\n" appears in a string in the output statement it is output
  2134. as a newline.
  2135.  
  2136.  
  2137.                           REPORT STATEMENT
  2138.  
  2139. The format of the report statement is:
  2140.  
  2141.        report(x,y,another_cellname,z,w.....)
  2142.  
  2143. When executed, the report statement sends to the current output a report
  2144. on each of the cells in its argument list, in the order encountered,
  2145. using the current report type and format.
  2146.  
  2147.  
  2148.  
  2149.                           EXIT STATEMENT
  2150.  
  2151. The exit statement consists simply of the word:
  2152.             exit
  2153. No matter where the statement is encountered, it causes the immediate
  2154. terminaiton of script execution, and the issuance of the message:
  2155.  
  2156. EXIT REQUESTED IN CELL xxxxx
  2157.  
  2158.  
  2159.  
  2160.                         COMPOUND STATEMENT
  2161.  
  2162. A compound statement consists of a left curly brace followed by zero
  2163. or more statements followed by a right curly brace:
  2164.  
  2165. {
  2166.     if(a){
  2167.          out("\nRound the corner off")
  2168.     }
  2169.     out("\nEat pie for dessert")
  2170. }
  2171.  
  2172.  
  2173.  
  2174.                        EXPRESSION STATEMENT
  2175.  
  2176. An expression statement is an expression,
  2177. such as shown on each of lines below:
  2178.  
  2179.           1
  2180.          17
  2181.         a<b
  2182.        NOT x!
  2183.       a+14*sin(221-4)
  2184.        (((1)))
  2185.       hi cat "muzza"
  2186.       (a(x,1) AND b)+14
  2187.  
  2188. Expressions may take string or numeric values.  The type
  2189. of result depends upon the types of factors in the expression
  2190. and on the operations performed.
  2191.  
  2192. The value of an expression may be automatically converted from
  2193. a number to a string or vice versa, depending on what operation
  2194. is applied to it.  In an arithmetic expression like
  2195.  
  2196.         cell+bonzo
  2197.  
  2198. the operands cell and bonzo must be numeric, so their values will
  2199. be forced to numbers if they are not already.  In a string expression,
  2200. like
  2201.  
  2202.          cell cat bonzo
  2203.  
  2204. the operands must be strings to be concatenated, so they will be coerced
  2205. to strings if necessary.
  2206.  
  2207. In contexts where the same operator applies to both numbers and strings,
  2208. there are special rules.  In the comparison expression
  2209.  
  2210.          x=y
  2211.  
  2212. if both operands have a numeric type, the comparison is numeric; otherwise
  2213. any numeric operand is coerced to a string and the comparison is made on
  2214. the string values.
  2215.  
  2216. Cell values which have never been set have only the string value "";
  2217. they are not numeric, but when coerced to numbers, take the value 0.
  2218.  
  2219. There are two ways to convert an expression from one type to another:
  2220.  
  2221.       number cat ""  concatenate a null string to a number to
  2222.                      force the expression to take a string value.
  2223.       string + 0     add zero to a string to force the expression
  2224.                      to take a numeric value
  2225.  
  2226. To force a string comparison between two expressions, coerce
  2227. one of the expressions to a string:
  2228.  
  2229.       cell cat "" = booga
  2230.  
  2231. To force a numeric comparison between two expressions, coerce
  2232. BOTH of the expressions to numbers:
  2233.  
  2234.       cell+0 >= booga+0
  2235.  
  2236. The numeric value of a string is the value of the longest prefix
  2237. of the string that looks numeric.  Thus
  2238.  
  2239.     out("1E2"+0,"12E"+0,"E12"+0,"1x2y3"+0)
  2240. yields
  2241.          1001201
  2242.  
  2243. The string value of a number is determined by formatting the number
  2244. for output, as if it had been included in an 'out' statement.
  2245.  
  2246. NOTICE:  Whenever the script interpreter encounters an expression when
  2247. it is looking for a statement, it evaluates the expression and sets the
  2248. value of the cell in which it finds the expression to the value returned
  2249. by the expression. 
  2250.  
  2251. ====|====Automatic Ouptut
  2252. Automatic output is the generic or formatted output selected in the
  2253. Execution Preferences dialog.  It is particularly useful when doing
  2254. cellular calculations, and the scripts contain no 'out' or 'report'
  2255. statements.
  2256.  
  2257. ====|====Script Generated Output
  2258. Two script language statements, 'out' and 'report', send data to
  2259. the output stream.  Both statements are described in the section
  2260. above called 'Script Language Statements'.
  2261.  
  2262. CAUTION AGAINST USING BOTH KINDS OF OUTPUT AT ONCE
  2263. If automatic output is not turned off by setting Execution Results
  2264. to 'Don't List', it will come out at the end
  2265. of each iteration, possibly messing up the format of any
  2266. script generated output.
  2267.  
  2268. ====|====Script Language Grammar
  2269. The permissable content of a script field is one or more statements.
  2270. Lines beginning with a '#' character are taken to be comment lines.
  2271. Wherever a '#' character appears in a formula, the remainder of that
  2272. line is taken to be a comment.
  2273.  
  2274. The grammar recognized by the SpyderX script interpreter is shown
  2275. in Backus Naur Form below (items in [ ] are optional):
  2276.  
  2277. <script> ::= <stmtlist>
  2278.  
  2279. <stmtlist> ::=    empty
  2280.                 | <stmt> <stmtlist>
  2281.  
  2282. <stmt> ::=        <compound stmt>
  2283.                 |  <set stmt>
  2284.                 | "if" "(" <expr> ")" <compound stmt> <optelse>
  2285.                 | "while" "(" <expr> ")" <compound stmt>
  2286.                 | "do" <compound stmt> "while" "(" <expr> ")"
  2287.                 | "for" "(" <cellname> "=" <expr> "to" <expr>
  2288.                                       ["step"  <expr>] ")" <compound stmt>
  2289.                 | "in" "(" <inlist> ")"
  2290.                 | "out" "(" <outlist> ")"
  2291.                 | "report" "(" <cellist> ")"
  2292.                 | "exit"
  2293.                 | <expr>
  2294.  
  2295. <compound stmt> ::= "{" <stmtlist> "}"
  2296.  
  2297. <set stmt> ::= "set" <configwd> ["to"] <configval>
  2298.                 |  "set" <configwd> ["to"] <string>
  2299.                 |  "set" <configwd> ["to"] number
  2300.                 |  "set" <cellname> ["to"] <expr>
  2301.  
  2302. <optelse> ::=     empty
  2303.                 | "else" <compound stmt>
  2304.                 | "elseif" "(" <expr> ")" <compound stmt> <optelse>
  2305.  
  2306. <inlist>    ::=  <inspec>
  2307.                 | <inspec> "," <inlist>
  2308.  
  2309. <inspec>   ::= <string> | <cellname>
  2310.  
  2311. <outlist>    ::=  <expr>
  2312.                  | <expr> "," <outlist>
  2313.  
  2314. <cellist>    ::=  <cellname>
  2315.                  |  <cellname> "," <cellist>
  2316.  
  2317. <expr> ::=        <aexpr>
  2318.                 | <aexpr> <relop> <aexpr>
  2319.  
  2320. <relop> ::=       "=" | "<" | "<=" | ">=" | "<>"
  2321.  
  2322. <aexpr> ::=       <term prefix> <termlist>
  2323.  
  2324. <term prefix> ::= empty | "+" | "-"
  2325.  
  2326. <termlist> ::=    <term>
  2327.                 | <term> <termop> <termlist>
  2328.  
  2329. <termop> ::=      "+" | "-" | "OR" | "cat"
  2330.  
  2331. <term>   ::=      <factor>
  2332.                 | <factor> <factop> <term>
  2333.  
  2334. <factop> ::=      "*" | "/" | "%" | "AND"
  2335.                 
  2336. <factor>  ::=     <cellname>
  2337.                 | <cellname> "!"
  2338.                 | <cellname> "("<arglist>")"
  2339.                 | <cellname> "[" <expr> "]"
  2340.                 | <cellname> "[" <expr> "]"!
  2341.                 | <cellname> "[" <expr> "]""("<arglist>")"
  2342.                 | a number
  2343.                 | <string>
  2344.                 | "NOT" <factor>
  2345.                 | "pi"
  2346.                 | "e"
  2347.                 | "eof"
  2348.                 | <builtin>
  2349.                 | "(" <expr> ")"
  2350.                 | "%" integer
  2351.  
  2352. <builtin>  ::=  <funcname> "(" <arglist> ")"
  2353.  
  2354. <funcname> ::= "min" | "max" | "mean" | "abs" | "sign" | "stp"
  2355.                   | "sig" | "sin" | "cos" | "tan" | "asin" | "acos" | "atan"
  2356.                   | "sqrt" | "ln" | "exp" | "log" | "pow" | "rand"
  2357.  
  2358. <arglist>    ::= empty
  2359.                   | <expr>
  2360.                   | <expr> "," <expr>
  2361.                   | <expr> "," <expr> "," ....... "," <expr>
  2362.  
  2363. <configval>  ::= formatted | inptrs | outptrs | trail | fixed | expn
  2364.                   | general | degrees | radians
  2365.  
  2366. <string>   ::=    <quote> zero or more characters <quote>
  2367.                   | an <identifier> which
  2368.                     is not a system variable, system constant, cellname,
  2369.                     builtin or a reserved word
  2370.  
  2371. <quote>  ::=     ' | " 
  2372.    
  2373. NOTE:  Ending quote character must be same as beginning one.
  2374.  
  2375. <cellname>  ::=  an <identifier> that is not a <configwd>, a <configval>,
  2376.                  "pi", "e", or "eof", a <funcname> or a reserved word.
  2377.  
  2378. <identifier> ::=  a letter followed by zero or more letters,digits,
  2379.                   or underscores.
  2380.  
  2381. ====Errors, Limits, License, and Support
  2382. ====|====Error Conditions
  2383.  
  2384. ====|====|====Out of Memory Error
  2385. When SpyderX writes a web to a disk, it writes it
  2386. first as a temporary file, called temp.tmp, and then
  2387. renames the temporary file to the name of the web.
  2388.  
  2389. If a memory shortage prevents the entire web from 
  2390. being written, the update is not completed, and the
  2391. old version of the web remains on the disk.
  2392.  
  2393. ====|====|====Script Errors
  2394. When a script is executed, there are several error messages that
  2395. can result.  These messages are listed below:
  2396.  
  2397. BAD IDENTIFIER IN CELL XXXXX
  2398. One of the identifiers in the formula for the cell named xxxx is
  2399. neither a cell name nor a built-in function.
  2400.  
  2401. ILLEGAL CHARACTER IN CELL XXXXX
  2402. There is a character in formula xxxx that is not permitted.
  2403.  
  2404. STACK OVERFLOW IN CELL XXXXX
  2405. The formula in cell xxxx contains a cell reference which is part of
  2406. a circular chain of cell references, which is not permissable when
  2407. all the references in the circular chain are execution references.
  2408.  
  2409. MISSING PAREN IN CELL XXXX
  2410. Self Explanatory.
  2411.  
  2412. MISSING '{' IN CELL XXXXX
  2413. An If statement is missang a left curly brace in the formula field
  2414. of cell xxxx.
  2415.  
  2416. MISSING '}' IN CELL XXXXX
  2417. An If statement is missang a right curly brace in the formula field of
  2418. cell xxxx.
  2419.  
  2420. SUBSCRIPT MISSING ']' IN CELL XXXXX
  2421. A subscript was not terminated with a right bracket.
  2422.  
  2423. SUBSCRIPT OUT OF RANGE IN CELL XXXXX
  2424. A subscript was less than zero or greater than the number of cells
  2425. in the web.
  2426.  
  2427. INVALID EXPRESSION IN CELL XXXXX
  2428. Problem with expression syntax.
  2429.  
  2430. EXPECTED FORMAT STRING (IN QUOTES) IN CELL XXXX
  2431. Set statement expected calculation or report format string.  It got
  2432. something else.
  2433.  
  2434. INVALID REPORT TYPE IN CELL XXXXX
  2435. Set statement expected a report type of Inptrs, Outptrs,
  2436. Trail or Formatted.  It found something else.
  2437.  
  2438. ILLEGAL STATEMENT IN CELL XXXXX.
  2439. Script interpreter was looking for a statement and found
  2440. something that wasn't.
  2441.  
  2442. BAD SET STMT IN CELL XXXXX
  2443. A set statement had improper syntax.
  2444.  
  2445. OBJECT OF SET MUST BE RESERVED WORD IN CELL XXXXXX
  2446. The word set was not followed by either a cellname or a valid
  2447. configuration word of RptTypeX, RptFmtX, NumFmtX, NumDecX,
  2448. or TrigUnitsX.
  2449.  
  2450. NUMBER FORMAT SHOULD BE FIXED, EXP, OR GENERAL IN CELL XXXXX.
  2451. A 'set NumFmtX' statement should have set the value to fixed,
  2452. exp, or general.
  2453.  
  2454. BAD NUMBER OF DECIMAL PLACES IN CELL XXXXX.
  2455. The number of decimal places specified in a 'set NumDecX" statement
  2456. was less than zero or greater than 15 or not numeric.
  2457.  
  2458. TRIG UNITS TYPE SHOULD BE DEGREES OR RADIANS IN CELL XXXXX
  2459. Set statement setting trig units set it to something illegal.
  2460.  
  2461. BUILTIN FUNCTION CALL ERROR IN CELL XXXXX
  2462. There is a problem with a comma or parenthesis in a built-in
  2463. function reference in the formula field of cell xxxx.
  2464.  
  2465. BUILTIN FUNCTION ARG ERROR IN CELL XXXXX
  2466. There is a problem with the number or type of arguments to a built-in
  2467. function in the formula field of cell xxxx.
  2468.  
  2469. ARGUMENT LIST ERROR IN CELL XXXXXX
  2470. There is a problem with the argument list of an execution
  2471. reference to another cell in the cell named.
  2472.  
  2473. EXPECTED ARGUMENT NUMBER IN CELL XXXXXX
  2474. In the specified cell script, a percent sign was
  2475. not followed by a integer denoting the argument number.
  2476.  
  2477. ARGUMENT NUMBER INVALID IN CELL XXXXXX
  2478. An argument number following a percent sign is either too
  2479. big or negative in the script of the cell specified. 
  2480.  
  2481. POORLY FORMATTED CELL LIST IN CELL XXXXX
  2482. A report statement had an improperly formatted cell list.
  2483.  
  2484. BAD DO STMT SYNTAX IN CELL XXXXX
  2485. Bad syntax in a do statement.
  2486.  
  2487. BAD FOR STATEMENT IN CELL XXXXX.
  2488. A for statement in the specified cell had an error in some portion
  2489. of the statement, other than the compound statement portion.
  2490.  
  2491. EXPECTED '=' IN CELL XXXXXX
  2492. An error in a for statement.
  2493.  
  2494. EXPECTED 'TO' IN CELL XXXXXXX
  2495. An error in a for statement.
  2496.  
  2497. SYNTAX ERROR IN CELL XXXXX
  2498. There is an error in the script field syntax of cell xxxx.
  2499.  
  2500. MISSING ',' OR ')' IN OUT STMT IN CELL XXXXX
  2501. Self Explanatory.
  2502.  
  2503. EXPECTED '(' IN CELL XXXXX
  2504. A left parenthesis was expected, but not found, in the script
  2505. field of cell xxxxx..
  2506.  
  2507. EXPECTED ')' IN CELL XXXXX
  2508. A right parenthesis was expected, but not found, in the script
  2509. field of cell xxxx.
  2510.  
  2511. ATTEMPTED TO READ PAST END OF FILE IN CELL XXXXXX
  2512. Self Explanatory.
  2513.  
  2514. BAD IN STATEMENT IN CELL XXXXX.
  2515. Error in an 'in' statement.
  2516.  
  2517. SCRIPT ERROR IN CELL XXXXX.
  2518. There is an otherwise unclassified error in the script of the
  2519. specified cell.
  2520.  
  2521. INTERNAL SOFTWARE ERROR IN CELL XXXXX
  2522. There is a bug in SpyderX.  Please report the circumstances to David
  2523. Clifton at eieio@boulder.earthnet.net, or 71270.1441@compuserve.com.
  2524.  
  2525. MISUSE OF RESERVED WORD IN CELL XXXXX
  2526. One of the reserved words, (any word in quotes in the grammar),
  2527. is out of place in cell XXXXX. 
  2528.  
  2529. UNEXPECTED END OF SCRIPT IN CELL XXXXX
  2530. The script field of cell xxxx ended before a complete expression
  2531. was parsed.
  2532.  
  2533.  
  2534. LIMITS, WARRANTIES, AND SUPPORT
  2535.  
  2536. ====Program Limits
  2537. The following limits apply to version 2.3 of SpyderX:
  2538.  
  2539.     Maximum Size of a Cell Name:            48        
  2540.     Maximum Characters in a Text Pane:        2047
  2541.     Maximum Characters in a Value Pane:        255
  2542.     Maximum Characters in a Formula Pane:     2047 
  2543.     Maximum Number of digits in a number:       24
  2544.     Maximum Significant digits in a number:     15
  2545.     Maximum Number of Cells:                 limited by 64K
  2546.                                              program data
  2547.                                              data segment size.
  2548.  
  2549. ====Warranty, License, Registration, and Distribution
  2550.  
  2551.  
  2552.          LIMITED WARRANTY AND DISCLAIMER OF WARRANTY 
  2553.  
  2554. THIS SOFTWARE AND ACCOMPANYING WRITTEN MATERIALS (INCLUDING
  2555. INSTRUCTIONS FOR USE) ARE PROVIDES "AS IS" WITHOUT WARRANTY OF
  2556. ANY KIND. FURTHER, NEITHER EIEIO NOR DAVID CLIFTON PROVIDES ANY
  2557. WARRANT, GUARANTEE, OR MAKES ANY REPRESENTATIONS REGARDING THE
  2558. USE, OR THE RESULTS OF USE, OF THE SOFTWARE OR WRITTEN MATERIALS
  2559. IN TERMS OF CORRECTNESS, ACCURACY, RELIABILITY, CURRENTNESS,
  2560. OR OTHERWISE. THE ENTIRE RISK AS TO THE RESULTS AND PERFORMANCE
  2561. OF THE SOFTWARE IS ASSUMED BY YOU. IF THE SOFTWARE OR WRITTEN
  2562. MATERIALS ARE DEFECTIVE YOU, AND NOT EIEIO OR ITS DEALERS,
  2563. DISTRIBUTORS, AGENTS, OR EMPLOYEES, ASSUME THE ENTIRE COST OF ALL
  2564. NECESSARY SERVICING, REPAIR, OR CORRECTION.
  2565.  
  2566. THE ABOVE IS THE ONLY WARRANTY OF ANY KIND, EITHER EXPRESS OR
  2567. IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
  2568. OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, THAT
  2569. IS MADE BY EIEIO OR DAVID CLIFTON, ON THIS PRODUCT.  NO ORAL OR
  2570. WRITTEN INFORMATION OR ADVICE GIVEN BY DAVID CLIFTON, EIEIO, ITS
  2571. DEALERS, DISTRIBUTORS, AGENTS OR EMPLOYEES SHALL CREATE A WARRANTY
  2572. OR IN ANY WAY INCREASE THE SCOPE OF THIS WARRANTY AND YOU MAY NOT
  2573. RELY ON ANY SUCH INFORMATION OR ADVICE. YOU MAY HAVE OTHER RIGHTS
  2574. WHICH VARY FROM STATE TO STATE. 
  2575.  
  2576. NEITHER EIEIO NOR ANYONE ELSE WHO HAS BEEN INVOLVED IN THE CREATION,
  2577. PRODUCTION OR DELIVERY OF THIS PRODUCT SHALL BE LIABLE FOR ANY DIRECT,
  2578. INDIRECT, CONSEQUENTIAL OR INCIDENTAL DAMAGES (INCLUDING DAMAGES FOR
  2579. LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
  2580. INFORMATION, AND THE LIKE) ARISING OUT OF THE USE OR INABILITY TO USE
  2581. SUCH PRODUCT EVEN IF EIEIO OR DAVID CLIFTON HAS BEEN ADVISED OF THE
  2582. POSSIBILITY OF SUCH DAMAGES.
  2583.  
  2584. This Limited Warranty shall be governed and construed in accordance
  2585. with the laws of the State of Colorado. 
  2586.  
  2587.                            ACKNOWLEDGMENT
  2588.  
  2589. BY USING THE SHAREWARE VERSION OF SPYDERX YOU ACKNOWLEDGE THAT YOU HAVE
  2590. READ THIS LIMITED WARRANTY, UNDERSTAND IT, AND AGREE TO BE BOUND BY ITS'
  2591. TERMS AND CONDITIONS. YOU ALSO AGREE THAT THE LIMITED WARRANTY IS THE
  2592. COMPLETE AND EXCLUSIVE STATEMENT OF AGREEMENT BETWEEN THE PARTIES AND
  2593. SUPERSEDES ALL PROPOSALS OR PRIOR AGREEMENTS, ORAL OR WRITTEN, AND ANY
  2594. OTHER COMMUNICATIONS BETWEEN THE PARTIES RELATING TO THE SUBJECT MATTER
  2595. OF THE LIMITED WARRANTY.
  2596.  
  2597.                              LICENSE
  2598.  
  2599. You may use the shareware version of SpyderX for a 30 day trial period.
  2600. If you would like to continue to use SpyderX after the 30 day trial
  2601. period, you are required to register as a user of SpyderX, and pay the
  2602. registration fee.  If you choose not to register or pay, you must 
  2603. remove SpyderX from your computer.
  2604.  
  2605. You may distribute evaluation copies of SpyderX to other persons or
  2606. organizations, provided such distribution takes place in accordance
  2607. with the provisions of the DISTRIBUTION paragraphs below.
  2608.  
  2609.  
  2610.                             REGISTRATION
  2611.  
  2612. The registration fee for SpyderX is $33.  For this price, you will
  2613. receive a diskette with the latest shareware version of SpyderX, the
  2614. printed user's manual, a key to disable registration reminders, and a
  2615. collection of sample webs.
  2616.  
  2617. You can register SpyderX using the Compuserve shareware registration
  2618. service, or by sending cash to the author.  For details on ordering
  2619. and payment, see below:
  2620.  
  2621.                        ORDERING AND PAYMENT
  2622.  
  2623. METHOD 1:  Compuserve shareware registration service
  2624.  
  2625. Log onto Compuserve and go to shareware registration under the 
  2626. computers menu (GO SWREG).  Access the registration database with
  2627. the program name, SpyderX, or the registration number 5574.  If
  2628. you want a Macintosh diskette, include the word '(MAC)'
  2629. on one of the address lines you enter.  (The parenthesized
  2630. word will be removed from the address line when your registration
  2631. packet is mailed).
  2632.  
  2633. METHOD 2:  By credit card through North Star Solution's
  2634.            Shareware Registration Service
  2635.  
  2636. You can order registration packets with Visa or MasterCard credit cards
  2637. from North Star Solutions shareware registration service.  Simply contact
  2638. North Star Solutions via any of the following methods:
  2639. Voice: 1-800-699-6395(10:00am-10:00pm,EST. Calls from US only.)
  2640.        1-800-699-6395(10:00am-10:00pm, Eastern Standard Time)
  2641. FAX: 1-803-699-5465(Available 24 hours.
  2642.     (International and Business Orders encouraged)
  2643. E-mail: CIS   71561,2751    Internet 71561.2751@compuserve.com
  2644.     (International and Business Orders encouraged)
  2645. Please have the following information ready:
  2646.  *  The program and version number ( SpyderX v2.3 )
  2647.  *  Where the registration packet should be mailed
  2648.  *  Your VISA or MasterCard number and expiration date
  2649.  *  Whether you want a MAC or a PC diskette (3.5 inch drives only)
  2650.  
  2651. IMPORTANT NOTES:
  2652. 1)  North Star processes registrations only, please contact the
  2653. author at 71270.1441@compuserve.com or eieio@boulder.earthnet.net for any
  2654. product information or technical support.
  2655. 2)  E-mailed and FAXed registrations are encouraged, but all registrations
  2656. are very much appreciated!
  2657.  
  2658.  
  2659. METHOD 3:  By sending cash to the author.
  2660.  
  2661. Send your mailing address, whether you want a MAC or a PC diskette,
  2662. and $33 to the address below:
  2663.     EIEIO
  2664.     P.O. Box 1086
  2665.     Niwot, CO 80544
  2666.     U.S.A.
  2667. Send cash in the form of U.S. dollars, a check drawn on a U.S. bank
  2668. (MICR code on the bottom), or International Money Orders for $33 (U.S.).
  2669. Add a 25% premium over the exchange rate if you send Canadian checks
  2670. in Canadian dollars, or major currencies (Pounds, Marks, Francs, or Yen).
  2671.  
  2672.  
  2673.                              DISTRIBUTION
  2674.  
  2675. You are encouraged to pass a copy of the shareware version of SpyderX
  2676. along to your friends for evaluation.  If you do so, you must provide
  2677. them with the entire set of SpyderX shareware version files. These include:
  2678.  
  2679.     README.TXT
  2680.     SPYDERX.APP
  2681.     VENDOR.DOC
  2682.     FILE_ID.DIZ
  2683.     CAVE.WEB
  2684.     AMORT.WEB
  2685.     CIRCLE.WEB
  2686.     FINANCE.WEB
  2687.     LOGISTIC.WEB
  2688.     CAVE.WEB
  2689.     PERT.WEB
  2690.     PIGGY.WEB
  2691.     QUOTES.WEB
  2692.     RKUTTA.WEB
  2693.     WEBSITES.WEB
  2694.     KING.WEB
  2695.     MATRIX.WEB
  2696.     FILTER.WEB
  2697.  
  2698. Alternatively, you may provide the .ZIP file which contains the files
  2699. listed above in compressed format.
  2700.  
  2701. If you intend to charge for distribution, you must adhere to the
  2702. requirements of the vendor.doc file.
  2703.  
  2704.  
  2705.                         OBTAINING SUPPORT
  2706.  
  2707. You may send messages, reports, and requests for information
  2708. to David Clifton at either of the two E-Mail addresses below:
  2709.  
  2710.     eieio@boulder.earthnet.net
  2711.     71270.1441@compuserve.com
  2712.  
  2713.